#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]; while(b>1){ ++m[d[b]]; b/=d[b]; } rep[g.edge[i]](j,g.es[i]){ if(j!=p){ mapc=f(j,i); if(c.size()>m.size()){ swap(c,m); } for(auto x:c){ if(x.second>m[x.first]){ m[x.first]=x.second; } } } } z[i]=1; for(auto x:m){ z[i]*=Mint(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]); } }