#include<bits/stdc++.h>
#define all(p) p.begin(),p.end()
using namespace std;
#define int long long
int mod = 998244353;
int binpow(int a, int n) {
    if (n == 0) {
        return 1;
    } else if (n & 1) {
        return binpow(a, n - 1) * a % mod;
    } else {
        return binpow(a * a % mod, n / 2);
    }
}
signed main() {
    int n;
    cin >> n;
    int q;
    cin >> q;
    int p[n + 1];
    for (int i = 1; i <= n; i++) {
        cin >> p[i];
    }
    // int p[4] = {0, 1, 2, 4};
    // int xr[8] = {};
    // for (int j = 0; j < 8; j++) {
    //     int pp[n + 1];
    //     for (int i = 1; i <= n; i++) {
    //     }
    // }
    // cout << 5 * 5 * 5 * 5 + 1 + 16 + 8 + 3 * 3 * 3 * 3 * 3 << endl;
    set<int>ds;
    while (q--) {
        int t;
        cin >> t;
        if (t == 1) {
            int pp[n + 1];
            for (int i = 1; i <= n; i++) {
                pp[i] = p[i];
            }
            for (int i = 1; i <= n; i++) {
                p[i] = pp[n - i + 1];
            }
        } else if (t == 2) {
            int pp[n + 1];
            for (int i = 1; i <= n; i++) {
                pp[i] = p[i];
            }
            for (int i = 1; i <= n; i++) {
                p[i] = n - pp[i] + 1;
            }
        } else {
            int pp[n + 1];
            for (int i = 1; i <= n; i++) {
                pp[i] = p[i];
            }
            for (int i = 1; i <= n; i++) {
                p[pp[i]] = i;
            }
        }
        int ans = 0;
        for (int i = 1; i <= n; i++) {
            ans += binpow(p[i], i);
            ans %= mod;
        }
        int h = 0, pr = 1;
        for (int i = 1; i <= n; i++) {
            h += pr * (p[i] - 1);
            pr *= n;
            pr %= mod;
            h %= mod;
        }
        ds.insert(h);
        // for (int i = 1; i <= n; i++) {
        //     cout << p[i] << ' ';
        // }
        // cout << endl;
        cout << ans << ' ';
    }
    assert(ds.size() <= 7);
}