#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const long long M=998244353;
struct mint
{
    long long x;
    mint()
    {
        x=0;
    }
    mint(long long _x)
    {
        x=(_x%M+M)%M;
    }
};
mint operator+(const mint &a,const mint &b)
{
    return mint(a.x+b.x);
}
mint operator-(const mint &a,const mint &b)
{
    return mint(a.x-b.x);
}
mint operator*(const mint&a,const mint &b)
{
    return mint(a.x*b.x);
}
mint binpow(mint a,long long b)
{
    if(b==0)
    {
        return mint(1);
    }
    if(b%2==0)
    {
        mint res=binpow(a,b/2);
        return res*res;
    }
    return binpow(a,b-1)*a;
}
vector<int> A;
mint ans[2][2][2];
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    int n,q,p,t;
    cin >> n >> q;
    for(int i=0;i<n;i++)
    {
        cin >> p;
        A.push_back(p);
    }
    for(int i=0;i<2;i++)
    {
        for(int j=0;j<2;j++)
        {
            for(int k=0;k<2;k++)
            {
                vector<int> B=A;
                if(i==1)
                {
                    reverse(B.begin(),B.end());
                }
                if(j==1)
                {
                    for(int f=0;f<n;f++)
                    {
                        B[f]=n-B[f]+1;
                    }
                }
                if(k==1)
                {
                    vector<int> C(n);
                    for(int f=0;f<n;f++)
                    {
                        C[B[f]-1]=f+1;
                    }
                    B=C;
                }
                mint sum;
                for(int f=0;f<n;f++)
                {
                    sum=sum+binpow(mint(B[f]),f+1);
                }
                ans[i][j][k]=sum;
            }
        }
    }
    int a=0,b=0,c=0;
    while(q--)
    {
        cin >> t;
        if(t==1)
        {
            if(a==1 && b==1 && c==1)
            {
                b=0;
            }
            else if(a==1 && b==0 && c==1)
            {
                b=1;
            }
            else if(a==0 && b==1 && c==1)
            {
                b=0;
            }
            else
            {
                a^=1;
            }
        }
        else if(t==2)
        {
            if(a==1 && b==1 && c==1)
            {
                a=0;
            }
            else if(a==0 && b==1 && c==1)
            {
                a=1;
            }
            else if(a==1 && b==0 && c==1)
            {
                a=0;
            }
            else
            {
                b^=1;
            }
        }
        else
        {
            c^=1;
        }
        cout << ans[a][b][c].x << " ";
    }
    return 0;
}
