#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <vector>
using namespace std;
#define LL long long
#define MAXN 210000
#define MOD 1000000007
vector<int> G[MAXN];
vector<LL> permul[MAXN], aftmul[MAXN];
LL up[MAXN], dn[MAXN];
void dfs1( int u, int fa)
{
dn[u] = 1;
for( int i = 0; i < G[u].size(); i++)
{
int v = G[u][i];
if(v == fa)
{
permul[u].push_back(1);
aftmul[u].push_back(1);
continue;
}
dfs1(v, u);
dn[u] = dn[u]*(dn[v]+1)%MOD;
permul[u].push_back(dn[v]+1);
aftmul[u].push_back(dn[v]+1);
}
for(int i = 1; i < G[u].size(); i++)
permul[u][i] = permul[u][i-1]*permul[u][i]%MOD;
for(int i = G[u].size() - 2; i >= 0; i--)
aftmul[u][i] = aftmul[u][i+1]*aftmul[u][i]%MOD;
}
void dfs2( int u, int fa, LL ans)
{
up[u] = ans;
for( int i = 0; i < G[u].size(); i++)
{
int v = G[u][i];
if(v == fa) continue;
LL res = ans;
if(i) res = res * permul[u][i-1]%MOD;
if(i < G[u].size()-1) res = res * aftmul[u][i+1]%MOD;
dfs2(v, u, (res+1)%MOD);
}
}
int main()
{
int n;
scanf("%d",&n);
int v;
for( int i = 2; i <= n; i++)
{
scanf("%d",&v);
G[i].push_back(v);
G[v].push_back(i);
}
dfs1(1, -1);
dfs2(1, -1, 1);
for( int i = 1; i <= n; i++)
printf("%I64d%c",up[i]*dn[i]%MOD, i == n?'\n':' ');
return 0;
}
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <vector>
using namespace std;
#define LL long long
#define MAXN 210000
#define MOD 1000000007
vector<int> G[MAXN];
vector<LL> permul[MAXN], aftmul[MAXN];
LL up[MAXN], dn[MAXN];
void dfs1( int u, int fa)
{
dn[u] = 1;
for( int i = 0; i < G[u].size(); i++)
{
int v = G[u][i];
if(v == fa)
{
permul[u].push_back(1);
aftmul[u].push_back(1);
continue;
}
dfs1(v, u);
dn[u] = dn[u]*(dn[v]+1)%MOD;
permul[u].push_back(dn[v]+1);
aftmul[u].push_back(dn[v]+1);
}
for(int i = 1; i < G[u].size(); i++)
permul[u][i] = permul[u][i-1]*permul[u][i]%MOD;
for(int i = G[u].size() - 2; i >= 0; i--)
aftmul[u][i] = aftmul[u][i+1]*aftmul[u][i]%MOD;
}
void dfs2( int u, int fa, LL ans)
{
up[u] = ans;
for( int i = 0; i < G[u].size(); i++)
{
int v = G[u][i];
if(v == fa) continue;
LL res = ans;
if(i) res = res * permul[u][i-1]%MOD;
if(i < G[u].size()-1) res = res * aftmul[u][i+1]%MOD;
dfs2(v, u, (res+1)%MOD);
}
}
int main()
{
int n;
scanf("%d",&n);
int v;
for( int i = 2; i <= n; i++)
{
scanf("%d",&v);
G[i].push_back(v);
G[v].push_back(i);
}
dfs1(1, -1);
dfs2(1, -1, 1);
for( int i = 1; i <= n; i++)
printf("%I64d%c",up[i]*dn[i]%MOD, i == n?'\n':' ');
return 0;
}