#include <bits/stdc++.h>
using namespace std;
#define ll long long
const ll mod=998244353;
ll n,a[100005],m,a2[100005];
bool vis[100005];
struct AAA {
ll a,b;
};
vector <ll> h[100005];
vector <AAA> hh[100005];
void cz (ll x){
vector<AAA>b;
vis[x]=1;
map<ll,ll>a;
map<ll,ll>::iterator it;
ll sum=1;
for (ll i=h[x][1]+1;i>=2;i--){
ll k=h[x][i];
if (h[k][0]==3){
if (!vis[k]){
cz(k);
}
for (int j=1;j<hh[k].size();j++){
int k1=hh[k][j].a,k2=hh[k][j].b;
if (h[k1][0]==2){
sum=sum*h[k1][1]%mod*k2%mod;
}
else {
a[k1]=(a[k1]+k2*sum)%mod;
}
}
sum=sum*hh[k][0].a%mod;
}
else {
int k1=k,k2=1;
if (h[k1][0]==2){
sum=sum*h[k1][1]%mod*k2%mod;
}
else {
a[k1]=(a[k1]+k2*sum)%mod;
}
}
}
AAA lll;
lll.a=sum;lll.b=0;
hh[x].push_back(lll);
for (it=a.begin();it!=a.end();it++){
AAA k;
k.a=it->first;
k.b=it->second;
hh[x].push_back(k);
}
}
int main (){
scanf ("%d",&n);
for (ll i=1;i<=n;i++){
scanf ("%d",&a2[i]);
}
scanf ("%d",&m);
for (ll i=1;i<=m;i++){
ll t;
scanf ("%d",&t);
h[i].push_back(t);
if (t==1){
ll p,v;
scanf ("%d%d",&p,&v);
h[i].push_back(p);
h[i].push_back(v);
}
else if (t==2){
ll v;
scanf ("%d",&v);
h[i].push_back(v);
}
else {
ll d;
scanf ("%d",&d);
h[i].push_back(d);
for (ll j=1;j<=d;j++){
ll x;
scanf ("%d",&x);
h[i].push_back(x);
}
}
}
for (ll i=1;i<=m;i++){
if (h[i][0]==3&&!vis[i]){
cz(i);
}
}
int xxx;
ll cc[100005]={};
scanf ("%d",&xxx);
for (int i=1;i<=xxx;i++){
scanf ("%d",&cc[i]);
}
ll sum=1;
for (int i=xxx;i>0;i--){
int k=cc[i];
if (h[k][0]==1){
int kk=h[k][1];
a[kk]=(a[kk]+h[k][2]*sum%mod)%mod;
}
else if (h[k][0]==2){
sum=sum*h[k][1]%mod;
}
else {
for (int i=1;i<hh[k].size();i++){
int k1=hh[k][i].a,k2=hh[k][i].b;
int kk=h[k1][1];
a[kk]=(a[kk]+h[k1][2]*k2%mod*sum%mod)%mod;
}
sum=sum*hh[k][0].a%mod;
}
}
for (int i=1;i<=n;i++){
cout<<(a[i]+a2[i]*sum%mod)%mod<<" ";
}
return 0;
}