#include <iostream>
#include <vector>
#include <algorithm>
#include <random>
#include <ctime>
#include <set>
using namespace std;
mt19937 rnd(time(nullptr));
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;
}
int n,q;
vector<int> A;
vector<int> Q;
vector<long long> smart()
{
    vector<long long> g;
    mint ans[2][2][2];
    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;
    for(int i=0;i<q;i++)
    {
        int t=Q[i];
        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 if(a==0 && b==0 && c==1)
            {
                b=1;
            }
            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 if(a==0 && b==0 && c==1)
            {
                a=1;
            }
            else
            {
                b^=1;
            }
        }
        else
        {
            c^=1;
        }
        g.push_back(ans[a][b][c].x);
    }
    return g;
}
vector<long long> stupid()
{
    vector<long long> g;
    vector<int> B=A;
    for(int i=0;i<q;i++)
    {
        int t=Q[i];
        if(t==1)
        {
            reverse(B.begin(),B.end());
        }
        else if(t==2)
        {
            for(int j=0;j<n;j++)
            {
                B[j]=n-B[j]+1;
            }
        }
        else
        {
            vector<int> C(n);
            for(int j=0;j<n;j++)
            {
                C[B[j]-1]=j+1;
            }
            B=C;
        }
        mint sum;
        for(int j=0;j<n;j++)
        {
            sum=sum+binpow(mint(B[j]),j+1);
        }
        g.push_back(sum.x);
    }
    return g;
}
int random(int l,int r)
{
    return uniform_int_distribution<int>(l,r)(rnd);
}
int main()
{
    for(int y=0;y<1;y++)
    {
        cin >> n;
        cin >> q;
        A.clear();
        Q.clear();
        for(int i=0;i<n;i++)
        {
            A.push_back(0);
            cin >> A.back();
        }
        for(int i=0;i<q;i++)
        {
            int u;
            cin >> u;
            Q.push_back(u);
        }
        vector<long long> a=smart();
        for(int i=0;i<q;i++)
        {
            cout << a[i] << " ";
        }
    }
    return 0;
}
