#include <bits/stdc++.h>
using namespace std;
const int MOD = 1000 * 1000 * 1000 + 7;
const int MAXN = 2 * 1000 * 100 + 1000;
int n;
vector<int> v[MAXN];
int p[MAXN];
long long d[MAXN], u[MAXN], f1[MAXN], f2[MAXN];
void input() {
  cin >> n;
  int x;
  for (int i = 2; i <= n; i++) {
    cin >> x;
    v[x].push_back(i);
    p[i] = x;
  }
}
void DFS_first(int k) {
  d[k] = 1;
  for (int i = 0; i < v[k].size(); i++) {
    DFS_first(v[k][i]);
    f1[v[k][i]] = d[k];
    d[k] = (d[k] * (d[v[k][i]] + 1)) % MOD;
  }
  long long l = 1;
  for (int i = v[k].size() - 1; i >= 0; i--) {
    f2[v[k][i]] = l;
    l = ((d[v[k][i]] + 1) * l) % MOD;
  }
}
void DFS_second(int k) {
  u[k] = (f1[k] * f2[k]) % MOD;
  u[k] = (u[k] * u[p[k]]) % MOD;
  u[k]++;
  for (int i = 0; i < v[k].size(); i++) {
    DFS_second(v[k][i]);
  }
  d[k] = (d[k] * u[k]) % MOD;
}
int main() {
  input();
  DFS_first(1);
  DFS_second(1);
  for (int i = 1; i <= n; i++) cout << d[i] << " ";
  return 0;
}
