#include using namespace std; typedef long long ll; const ll biao=1e6+10,mod=998244353; vector e[biao],v[biao]; ll dfn[biao],n,st[biao][20],d[biao],a[biao],idx,to[biao]; vector rd[biao],pri; ll vis[biao]; ll val[biao],mx[biao]; void dfs(ll node,ll father){ d[node]=d[father]+1,st[node][0]=father,dfn[node]=++idx,to[dfn[node]]=node; for(ll i=1;i<19;i++) st[node][i]=st[st[node][i-1]][i-1]; for(ll i=0;i=0;i--) if(d[st[x][i]]>=d[y]) x=st[x][i]; if(x==y) return x; for(ll i=18;i>=0;i--) if(st[x][i]!=st[y][i]) x=st[x][i],y=st[y][i]; return st[x][0]; } bool cmp(ll x1,ll x2){return dfn[x1]>=1; } return ret; } void artidfs(ll node){ // cout<now) now=mx[j],loc=j; } if(mx[node]>now){ ans[node]=ans[node]*mul%mod*val[node]%mod; } else{ mx[node]=now; val[node]=val[loc]; qp[node]=qp[loc]; ans[node]=ans[node]*mul%mod*val[loc]%mod; } e[node].clear(); } void link(ll x,ll y){ val[x]=qp[x]=1,mx[x]=0; val[y]=qp[y]=1,mx[y]=0; e[x].push_back(y); } void solve(ll p){ // cout<=2 && d[s[sz-1]]>=d[l]) link(s[sz-1],s[sz]),sz--; if(s[sz]!=l){ link(l,s[sz]); sz--; if(!sz || s[sz]!=l) s[++sz]=l; } s[++sz]=j; } ll rt=s[1]; val[rt]=qp[rt]=1,mx[rt]=0; while(sz>=2) link(s[sz-1],s[sz]),sz--; for(ll i=0;i"<<'\n'; // for(ll j=0;j1e6) break; vis[i*pri[j]]=1; if(i%pri[j]==0) break; } } cin>>n; for(ll i=1;i<=n;i++) cin>>a[i]; for(ll i=1;i>x>>y; v[x].push_back(y); v[y].push_back(x); } dfs(1,0); for(ll i=1;i<=n;i++){ ll tmp=a[to[i]]; for(ll j=0;j1e3) break; if(tmp%pri[j]) continue; while(tmp%pri[j]==0) tmp/=pri[j]; rd[pri[j]].push_back(to[i]); } if(tmp!=1) rd[tmp].push_back(to[i]); } for(ll i=1;i<=n;i++) ans[i]=1; for(ll i=0;i