#define MD 998244353 int d[1d6+1]; int a[5d5]; Mint z[5d5]; graph g; map f(int i,int p){ mapm; int b=a[i]; z[i]=b; while(b>1){ ++m[d[b]]; b/=d[b]; } rep[g.edge[i]](j,g.es[i]){ if(j!=p){ mapc=f(j,i); for(auto x:c){ if(x.second>m[x.first]){ z[i]*=Mint(x.first)**(x.second-m[x.first]); m[x.first]=x.second; } } } } return m; } { rep(i,2,1d6+1){ if(!d[i]){ rep(j,i,1d6+1,i){ d[j]=i; } } } int@n; rd(a(n)); int@(u,v)--[n-1]; g.setEdge(n,n-1,u,v); f(0,0); rep(i,n){ wt(z[i]); } }