sbno333 @ 2024-10-24 22:22:11
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define mod 998244353ll
#define pii pair<int,int>
int a[1000009];
struct st{
int v,ne;
int w;
}sd[2000009];
vector<int> z[100009];
int nn[100009];
int inn;
int h[100009];
void add(int u,int v){
sd[++inn].v=v;
sd[inn].ne=h[u];
h[u]=inn;
}
int cd[100009];
int lx[100009];
int xl[100009];
bool vis[100009];
priority_queue<pii,vector<pii>,greater<pii> > q;
int mj[100009];
int ii;
int dp[100009];
int rd[100009];
void dfs(int t){
if(lx[t]){
if(xl[t]){
a[xl[t]]+=lx[t]*dp[t];
a[xl[t]]%=mod;
}
return;
}
for(int i=h[t];i;i=sd[i].ne){
dp[sd[i].v]+=dp[t]*sd[i].w;
dp[sd[i].v]%=mod;
rd[sd[i].v]--;
if(!rd[sd[i].v]){
dfs(sd[i].v);
}
}
}
signed main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
int m;
cin>>m;
for(int i=1;i<=m;i++){
z[i].push_back(0);
}
for(int i=1;i<=m;i++){
int t;
cin>>t;
if(t==1){
int p,c;
cin>>p>>c;
xl[i]=p;
lx[i]=c;
}else if(t==2){
int c;
cin>>c;
lx[i]=c;
}else{
int c;
cin>>c;
for(int j=1;j<=c;j++){
int g;
cin>>g;
add(i,g);
z[g].push_back(0);
z[g][++nn[g]]=i;
}
cd[i]=c;
}
}
for(int i=1;i<=m;i++){
q.push({cd[i],i});
}
while(q.size()){
int g;
g=q.top().second;
q.pop();
if(vis[g]){
continue;
}
vis[g]=1;
mj[++ii]=g;
for(int i=1;i<=nn[g];i++){
cd[z[g][i]]--;
q.push({cd[z[g][i]],z[g][i]});
}
}
for(int i=1;i<=ii;i++){
int t;
t=1;
for(int j=h[mj[i]];j;j=sd[j].ne){
sd[j].w=t;
if(!xl[sd[j].v])
t*=dp[sd[j].v];
t%=mod;
}
dp[mj[i]]=t;
if(lx[mj[i]]&&!xl[mj[i]]){
dp[mj[i]]=lx[mj[i]];
}
}
int q;
cin>>q;
for(int i=1;i<=q;i++){
int x;
cin>>x;
add(m+1,x);
}
int t;
t=1;
for(int j=h[m+1];j;j=sd[j].ne){
sd[j].w=t;
if(!xl[sd[j].v])
t*=dp[sd[j].v];
t%=mod;
}
dp[m+1]=t;
if(lx[m+1]&&!xl[m+1]){
dp[m+1]=lx[m+1];
}
for(int i=1;i<=n;i++){
a[i]*=dp[m+1];
a[i]%=mod;
}
for(int i=1;i<=m+1;i++){
dp[i]=0;
for(int j=h[i];j;j=sd[j].ne){
rd[sd[j].v]++;
}
}
dp[m+1]=1;
dfs(m+1);
for(int i=1;i<=n;i++){
cout<<a[i]<<" ";
}
return 0;
}