#include <bits/stdc++.h>
// #pragma GCC optimize("O3,unroll-loops")
// #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
using namespace std;
#define int long long

const int MOD = 998244353;

int fast_pow(int a, int b) {
    int k = 1;
    for (int i = 1; i <= b; i++) k = (k * a) % MOD;
    return k;
    // if (b == 0) return 1;
    // if (b == 1) return a % MOD;
    // int k = fast_pow(a, b / 2);
    // return k * k * fast_pow(a, b % 2) % MOD;
}

signed main() {
    int n, q;
    cin >> n >> q;
    vector<int> nums(n, 0);
    for (int i = 0; i < n; i++) cin >> nums[i];
    while (q--) {
        int t;
        cin >> t;
        if (t == 1) {
            reverse(nums.begin(), nums.end());
        } else if (t == 2) {
            for (int i = 0; i < n; i++) {
                nums[i] = n - nums[i] + 1;
            }
        } else if (t == 3) {
            vector<int> new_nums(n);
            for (int i = 0; i < n; i++) {
                new_nums[nums[i] - 1] = i + 1;
            }
            nums = new_nums;
        }
        int output = 0;
        for (int i = 0; i < nums.size(); i++) {
            output = (output + fast_pow(nums[i], i + 1)) % MOD;
        }
        cout << output << '\n';
    }
}
