#include <bits/stdc++.h>
#define ll long long int
#define MOD 1000000007
using namespace std;
ll fast_pow(ll base,ll exp){if (exp == 0) return 1;if (exp == 1) return base % MOD;ll t = fast_pow(base, exp / 2);t = ((t% MOD) * (t%MOD)) % MOD;if (exp % 2 == 0)return t;else return ((base % MOD) * t) % MOD;}
class Graph
{
//map<source, vector<destinations>>
map<ll,std::vector<ll>>adjList ;
public :
Graph()
{
}
void addEdge(ll source, ll destination, bool bidr = true)
{
adjList[source].push_back(destination);
if(bidr)
adjList[destination].push_back(source);
}
ll DFShelper(ll node, unordered_map<ll, bool> &visited, std::vector<ll> &dp)
{
if(dp[node] != -1) return dp[node];
visited[node] = true;
ll ans = 1;
for(auto &neighbour : adjList[node])
{
if(!visited[neighbour])
{
ans *= ((1 + DFShelper(neighbour,visited,dp)) % MOD);
ans = ans % MOD;
}
}
dp[node] = ans;
return dp[node];
}
void BFS(ll source, ll parent, std::vector<ll> &dp)
{
queue<ll> BFSqueue;
unordered_map<ll, bool> marked;
BFSqueue.push(source);
marked[source] = true;
while(!BFSqueue.empty())
{
ll node = BFSqueue.front();
BFSqueue.pop();
//push all unvisited neighbours of node in queue
for(auto &neighbour: adjList[node])
{
if(!marked[neighbour])
{
parent = node;
//dp[node]/(1+dp[neighbour]) removes answer of current node from parent subtree
dp[neighbour] *= ((1 + dp[node]/(1+dp[neighbour]) % MOD) % MOD); //adding answer of parent
dp[neighbour] = dp[neighbour] % MOD;
BFSqueue.push(neighbour);
marked[neighbour] = true;
}
}
}
}
};
int main()
{
ios_base::sync_with_stdio(false);cin.tie(NULL); cout.tie(NULL);
ll n;
cin >> n;
Graph g;
for(ll i = 1; i < n; i++)
{
ll a;
cin >> a;
g.addEdge(i,a-1);
}
vector<ll> dp(n,-1);
unordered_map<ll, bool> visited;
g.DFShelper(0, visited,dp);
g.BFS(0,-1,dp);
for (auto &i : dp) cout << i << " ";
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgbGwgbG9uZyBsb25nIGludAojZGVmaW5lIE1PRCAxMDAwMDAwMDA3CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmxsIGZhc3RfcG93KGxsIGJhc2UsbGwgZXhwKXtpZiAoZXhwID09IDApIHJldHVybiAxO2lmIChleHAgPT0gMSkgcmV0dXJuIGJhc2UgJSBNT0Q7bGwgdCA9IGZhc3RfcG93KGJhc2UsIGV4cCAvIDIpO3QgPSAoKHQlIE1PRCkgKiAodCVNT0QpKSAlIE1PRDtpZiAoZXhwICUgMiA9PSAwKXJldHVybiB0O2Vsc2UgcmV0dXJuICgoYmFzZSAlICBNT0QpICogdCkgJSBNT0Q7fQpjbGFzcyBHcmFwaAp7CiAgICAvL21hcDxzb3VyY2UsIHZlY3RvcjxkZXN0aW5hdGlvbnM+PgogICAgbWFwPGxsLHN0ZDo6dmVjdG9yPGxsPj5hZGpMaXN0IDsKICAgIHB1YmxpYyA6IAogICAgR3JhcGgoKQogICAgewogCiAgICB9CiAgICB2b2lkIGFkZEVkZ2UobGwgc291cmNlLCBsbCBkZXN0aW5hdGlvbiwgYm9vbCBiaWRyID0gdHJ1ZSkKICAgIHsKICAgICAgICBhZGpMaXN0W3NvdXJjZV0ucHVzaF9iYWNrKGRlc3RpbmF0aW9uKTsKICAgICAgICBpZihiaWRyKQogICAgICAgICAgICBhZGpMaXN0W2Rlc3RpbmF0aW9uXS5wdXNoX2JhY2soc291cmNlKTsKICAgIH0KICAgIGxsIERGU2hlbHBlcihsbCBub2RlLCB1bm9yZGVyZWRfbWFwPGxsLCBib29sPiAmdmlzaXRlZCwgc3RkOjp2ZWN0b3I8bGw+ICZkcCkKICAgIHsKICAgICAgICBpZihkcFtub2RlXSAhPSAtMSkgcmV0dXJuIGRwW25vZGVdOwogICAgICAgIHZpc2l0ZWRbbm9kZV0gPSB0cnVlOwogICAgICAgIGxsIGFucyA9IDE7CiAgICAgICAgZm9yKGF1dG8gJm5laWdoYm91ciA6IGFkakxpc3Rbbm9kZV0pCiAgICAgICAgewogICAgICAgICAgICBpZighdmlzaXRlZFtuZWlnaGJvdXJdKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBhbnMgKj0gKCgxICsgREZTaGVscGVyKG5laWdoYm91cix2aXNpdGVkLGRwKSkgJSBNT0QpOwogICAgICAgICAgICAgICAgYW5zID0gYW5zICUgTU9EOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGRwW25vZGVdID0gYW5zOwogICAgICAgIHJldHVybiBkcFtub2RlXTsKICAgIH0KICAgIHZvaWQgQkZTKGxsIHNvdXJjZSwgbGwgcGFyZW50LCBzdGQ6OnZlY3RvcjxsbD4gJmRwKQogICAgewogICAgICAgIHF1ZXVlPGxsPiBCRlNxdWV1ZTsKICAgICAgICB1bm9yZGVyZWRfbWFwPGxsLCBib29sPiBtYXJrZWQ7CiAgICAgICAgQkZTcXVldWUucHVzaChzb3VyY2UpOwogICAgICAgIG1hcmtlZFtzb3VyY2VdID0gdHJ1ZTsKICAgICAgICB3aGlsZSghQkZTcXVldWUuZW1wdHkoKSkKICAgICAgICB7CiAgICAgICAgICAgIGxsIG5vZGUgPSBCRlNxdWV1ZS5mcm9udCgpOwogICAgICAgICAgICBCRlNxdWV1ZS5wb3AoKTsKICAgICAgICAgICAgLy9wdXNoIGFsbCB1bnZpc2l0ZWQgbmVpZ2hib3VycyBvZiBub2RlIGluIHF1ZXVlCiAgICAgICAgICAgIGZvcihhdXRvICZuZWlnaGJvdXI6IGFkakxpc3Rbbm9kZV0pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmKCFtYXJrZWRbbmVpZ2hib3VyXSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSBub2RlOwogICAgICAgICAgICAgICAgICAgIC8vZHBbbm9kZV0vKDErZHBbbmVpZ2hib3VyXSkgcmVtb3ZlcyBhbnN3ZXIgb2YgY3VycmVudCBub2RlIGZyb20gcGFyZW50IHN1YnRyZWUKICAgICAgICAgICAgICAgICAgICBkcFtuZWlnaGJvdXJdICo9ICgoMSArIGRwW25vZGVdLygxK2RwW25laWdoYm91cl0pICUgTU9EKSAlIE1PRCk7IC8vYWRkaW5nIGFuc3dlciBvZiBwYXJlbnQgCiAgICAgICAgICAgICAgICAgICAgZHBbbmVpZ2hib3VyXSA9IGRwW25laWdoYm91cl0gJSBNT0Q7CiAgICAgICAgICAgICAgICAgICAgQkZTcXVldWUucHVzaChuZWlnaGJvdXIpOwogICAgICAgICAgICAgICAgICAgIG1hcmtlZFtuZWlnaGJvdXJdID0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfTsKaW50IG1haW4oKQp7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTtjaW4udGllKE5VTEwpOyBjb3V0LnRpZShOVUxMKTsKICAgIGxsIG47CiAgICBjaW4gPj4gbjsKICAgIEdyYXBoIGc7CiAgICBmb3IobGwgaSA9IDE7IGkgPCBuOyBpKyspCiAgICB7CiAgICAgICAgbGwgYTsKICAgICAgICBjaW4gPj4gYTsKICAgICAgICBnLmFkZEVkZ2UoaSxhLTEpOwogICAgfQogICAgdmVjdG9yPGxsPiBkcChuLC0xKTsKICAgIHVub3JkZXJlZF9tYXA8bGwsIGJvb2w+IHZpc2l0ZWQ7CiAgICBnLkRGU2hlbHBlcigwLCB2aXNpdGVkLGRwKTsKICAgIGcuQkZTKDAsLTEsZHApOwogICAgZm9yIChhdXRvICZpIDogZHApIGNvdXQgPDwgaSA8PCAiICI7CiAgICByZXR1cm4gMDsKfQ==