#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;

signed main() {
    int n, q;
    cin >> n >> q;
    vector<int> nums(n);
    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> update(n);
            for (int i = 0; i < n; i++) {
                update[nums[i] - 1] = i + 1;
            }
            nums = update;
        }
        int output = 0;
        for (int i = 0; i < nums.size(); i++) {
            // cout << nums[i] << ' ';
            output = (output + (int) pow(nums[i], i + 1)) % MOD;
        }
        cout << output << '\n';
    }
}
