#include <iostream>
#include <iomanip>
#include <vector>
#include <algorithm>
#include <cmath>
#include <ctime>
#include <random>
#include <queue>
#include <unordered_map>
#include <set>
using namespace std;
vector<int>v;
int n, q;
void f1() {
	reverse(v.begin(), v.end());
}
void f2() {
	for (int i = 0; i < n; i++) {
		v[i] = (n - v[i] + 1);
	}
}
void f3() {
	vector<int>v2(n);
	for (int i = 0; i < n; i++) {
		v2[v[i] - 1] = i + 1;
	}
	v = v2;
}
const long long mod = 998244353;
long long bp(long long a, long long b) {
	if (b == 0) {
		return 1;
	}
	if (b % 2 == 0) {
		long long c = bp(a, b / 2);
		return (c * c) % mod;
	}
	return (bp(a, b - 1) * a) % mod;
}
long long ans() {
	long long sum = 0;
	for (int i = 0; i < n; i++) {
		sum += bp(v[i], i + 1);
		if (sum >= mod) {
			sum -= mod;
		}
	}
	return sum;
}
signed main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cin >> n >> q;
	v.resize(n);
	for (int i = 0; i < n; i++) {
		cin >> v[i];
	}
	int a;
	for (int i = 0; i < q; i++) {
		cin >> a;
		if (a == 1) {
			f1();
		}
		if (a == 2) {
			f2();
		}
		if (a == 3) {
			f3();
		}
		cout << ans() << " ";
	}
}