rt,第二个样例每次测的时候后四个数都不一样且都是很大的数
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define int ll
const int N=1e6+7;
const int mod=1e9+7;
int n,head[N],tot=0;
int dp[N],ans[N];
vector<ll>sum[N],suf[N];
struct edge{int to,next;}e[N<<1];
inline void add(int from,int to){
e[++tot]={to,head[from]};
head[from]=tot;
}
inline void dfs1(int u,int fa){
dp[u]=1;
for(int i=head[u];i;i=e[i].next){
int v=e[i].to;
if(v!=fa)dfs1(v,u),dp[u]=dp[u]*((dp[v]+1ll)%mod)%mod;
}
return;
}
inline void dfs2(int u,int fa){
ans[u]=1;
for(int i=head[u];i;i=e[i].next){
int v=e[i].to;
ans[u]=ans[u]*((dp[v]+1ll)%mod)%mod;
if(v!=fa)sum[u].push_back(dp[v]+1),suf[u].push_back(dp[v]+1);
}
for(int i=1;i<sum[u].size();i++)sum[u][i]=(sum[u][i]%mod*sum[u][i-1]%mod)%mod;
for(int i=suf[u].size()-2;i>=0;i--)suf[u][i]=(suf[u][i]%mod*suf[u][i+1]%mod)%mod;
int cnt=0;
for(int i=head[u];i;i=e[i].next){
int v=e[i].to;
if(v==fa)continue;
dp[u]=(fa?dp[fa]+1:1)%mod;
if(cnt>0)dp[u]=dp[u]%mod*sum[u][cnt-1]%mod;
if(cnt<=suf[u].size()-2)dp[u]=dp[u]%mod*suf[u][cnt+1]%mod;
dfs2(v,u);cnt++;
}
}
signed main(){
cin>>n;
for(int i=2,x;i<=n;i++)cin>>x,add(x,i),add(i,x);
dfs1(1,0);dfs2(1,0);
for(int i=1;i<=n;i++)cout<<(ans[i]%mod+mod)%mod<<" ";
}