#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair<int, int>
#define pb push_back
#define rep(a, b, c, d) for(int a=b; a<=c; a+=d)
#define mod 998244353
const int N = 1e5 + 5;
int n, m, q, a[N], t[N], add[N], mul[N], pos[N], deg[N], deg2[N], sum[N];
vector<int> G1[N], G2[N];
void cal_mul() {
queue<int> q;
rep(i, 0, m, 1) {
deg[i] = G2[i].size();
if(!deg[i])
q.push(i);
}
while(!q.empty()) {
int u = q.front();
q.pop();
for(int v: G1[u]) {
mul[v] = mul[v] * mul[u] % mod;
-- deg[v];
if(!deg[v])
q.push(v);
}
}
}
void cal_num() {
queue<int> q;
rep(i, 0, m, 1) {
deg2[i] = G1[i].size();
if(!deg2[i])
q.push(i);
}
while(!q.empty()) {
int u = q.front();
q.pop();
int nowmul = 1;
rep(j, G2[u].size() - 1, 0, -1) {
int v = G2[u][j];
sum[v] = (sum[v] + sum[u] * nowmul) % mod;
nowmul = nowmul * mul[v] % mod;
-- deg2[v];
if(!deg2[v])
q.push(v);
}
}
}
signed main () {
scanf("%lld", &n);
rep(i, 1, n, 1)
scanf("%lld", &a[i]);
scanf("%lld", &m);
mul[0] = 1;
rep(i, 1, m, 1) {
scanf("%lld", &t[i]);
if(t[i] == 1)
scanf("%lld%lld", &pos[i], &add[i]), mul[i] = 1;
if(t[i] == 2)
scanf("%lld", &mul[i]);
if(t[i] == 3) {
int c;
scanf("%lld", &c);
mul[i] = 1;
rep(j, 1, c, 1) {
int g;
scanf("%lld", &g);
G1[g].pb(i);
G2[i].pb(g);
}
}
}
scanf("%lld", &q);
rep(i, 1, q, 1) {
int f;
scanf("%lld", &f);
G1[f].pb(0);
G2[0].pb(f);
}
sum[0] = 1;
cal_mul();
cal_num();
rep(i, 1, n, 1)
a[i] = a[i] * mul[0] % mod;
rep(i, 1, m, 1)
printf("%lld ", add[i]);
rep(i, 1, m, 1)
if(t[i] == 1)
a[pos[i]] = (a[pos[i]] + sum[i] * add[i]) % mod;
rep(i, 1, n, 1)
printf("%lld ", a[i]);
return 0;
}