#include #include #include using namespace std; using namespace atcoder; using mint = modint998244353; #define rep(i,n) for (int i = 0; i < (n); ++i) #define Inf32 1000000005 #define Inf64 1000000000000000001LL mint ans[500005]; map mp[500005]; vector> E; void dfs(int cv,int pv){ vector vs; rep(i,E[cv].size()){ int to = E[cv][i]; if(to==pv)continue; dfs(to,cv); vs.push_back(to); } rep(i,vs.size()){ int x = cv,y = vs[i]; if(mp[x].size() < mp[y].size()){ swap(mp[x],mp[y]); ans[x] = ans[y]; } for(auto z:mp[y]){ int p = z.first; int fx = mp[x][p],fy = z.second; if(fy > fx){ rep(_, fy - fx){ ans[x] *= p; } mp[x][p] = fy; } } mp[y].clear(); } } int main(){ int n; cin>>n; vector ps(1000001); for(int i=2;i1){ mp[i][ps[a]]++; a /= ps[a]; } } E.resize(n); rep(i,n-1){ int u,v; scanf("%d %d",&u,&v); u--,v--; E[u].push_back(v); E[v].push_back(u); } dfs(0,-1); rep(i,n){ printf("%d\n",ans[i].val()); } }