#include <bits/stdc++.h>
using namespace std;
const int MOD = (int)1e9 + 7;
const int MAXN = 100005;
int n;
vector<int> head[MAXN];
long long dp[MAXN][2];
long long dp2[2][2];
long long add(long long x, long long y) {
  x += y;
  if (x >= MOD) x -= MOD;
  return x;
}
long long sub(long long x, long long y) {
  x -= y;
  if (x < 0) x += MOD;
  return x;
}
void dfs(int u) {
  dp[u][1] = 1;
  dp[u][0] = 0;
  int L = head[u].size();
  if (!L) return;
  for (int i = 0; i < L; i++) {
    int v = head[u][i];
    dfs(v);
    long long odd = add(dp[u][1] * dp[v][0] % MOD, dp[u][0] * dp[v][1] % MOD);
    long long even = add(dp[u][1] * dp[v][1] % MOD, dp[u][0] * dp[v][0] % MOD);
    dp[u][1] = add(dp[u][1], odd);
    dp[u][0] = add(dp[u][0], even);
  }
  dp[u][1] = dp[u][1] * 2 % MOD;
  dp[u][0] = dp[u][0] * 2 % MOD;
  dp2[0][0] = 1;
  dp2[0][1] = 1;
  dp2[1][0] = 0;
  dp2[1][1] = 0;
  for (int i = 0; i < L; i++) {
    int v = head[u][i];
    long long temp = dp2[0][0];
    dp2[0][0] = add(dp2[0][0], dp[v][0] * dp2[1][0] % MOD);
    dp2[1][0] = add(dp2[1][0], dp[v][0] * temp % MOD);
    long long temp2 = dp2[0][1];
    dp2[0][1] = add(dp2[0][1], dp[v][1] * dp2[1][1] % MOD);
    dp2[1][1] = add(dp2[1][1], dp[v][1] * temp2 % MOD);
  }
  dp[u][1] = sub(sub(dp[u][1], dp2[0][0]), dp2[1][0]);
  dp[u][0] = sub(dp[u][0], dp2[1][1]);
}
int main() {
  scanf("%d", &n);
  for (int i = 2; i <= n; i++) {
    int p;
    scanf("%d", &p);
    head[p].push_back(i);
  }
  dfs(1);
  cout << add(dp[1][1], dp[1][0]) << endl;
  return 0;
}
