#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll N=5e5+5,P=998244353;
struct dian{
ll num,x,w;
}sxf[N];
ll l,r,m,n,op,x,w;
ll lu[N],a[N],que[N],sum[N],cs[N],yux[N],mt[N],inc[N],inf[N],k,qj;
vector<ll> c[N],f[N];
ll q_pow(ll a,ll b){
ll num=a,cnt=1,op=b;
return a;
while(b){
if(b&1) cnt=1ll*(cnt*num)%P;
num=1ll*(num*num)%P;
b>>=1;
}
}
void tfort(vector<ll> c[],ll inc[]){
l=1,r=0;
for(ll i=1;i<=m;i++){
sum[i]=sxf[i].num;
if(inc[i]==0){
que[++r]=i;
}
}
while(l<=r){
ll v=que[l];
for(auto i:c[v]){
if(inc[i]!=0){
--inc[i];
sum[i]=(sum[v]*sum[i])%P;
if(inc[i]==0){
que[++r]=i;
}
}
}
l++;
}
}
void topsort(ll inc[]){
memset(cs,0,sizeof(cs));
l=1,r=1;
que[1]=m+1;
cs[m+1]=sum[m+1]=1;
while(l<=r){
ll v=que[l],mk=cs[v];
lu[sxf[v].x]=(lu[sxf[v].x]+(sxf[v].w*cs[v])%P)%P;
for(ll i=(ll)(c[v].size())-1;i>=0;i--){
ll nxt=c[v][i];
if(inc[nxt]!=0){
inc[nxt]--;
if(inc[nxt]==0){
que[++r]=nxt;
}
cs[nxt]=(cs[nxt]+mk)%P;
mk=(mk*sum[nxt])%P;
}
}
if(l==1)
qj=mk;
l++;
}
}
int main(){
cin>>n;
for(ll i=1;i<=n;i++)
cin>>a[i];
cin>>m;
for(ll i=1;i<=m;i++){
cin>>op;
if(op==1){
cin>>x>>w;
sxf[i]=(dian){1,x,w};
}
else if(op==2){
cin>>w;
sxf[i]=(dian){w,0,0};
}
else{
cin>>x;
sxf[i]=(dian){1,0,0};
for(ll j=1;j<=x;j++){
cin>>w;
c[i].emplace_back(w);
inc[w]++;
f[w].emplace_back(i);
inf[i]++;
}
}
}
tfort(f,inf);
cin>>k;
for(ll i=1;i<=k;i++){
cin>>x;
c[m+1].emplace_back(x);
inc[x]++;
}
topsort(inc);
for(ll i=1;i<=n;i++){
cout<<(a[i]*qj%P+lu[i])%P<<' ';
}
return 0;
}