#include <bits/stdc++.h>
using namespace std;
int n, x;
int ojc[100007];
vector<int> v[100007];
long long dp[100007][2];
void licz(int x) {
  if (v[x].empty()) {
    dp[x][1] = 1;
    return;
  }
  sort(v[x].begin(), v[x].end());
  for (__typeof((v[x]).begin()) it = ((v[x]).begin()); it != (v[x]).end(); it++)
    licz(*it);
  long long ile1 = 1;
  long long ile0 = 0;
  for (__typeof((v[x]).begin()) it = ((v[x]).begin()); it != (v[x]).end();
       it++) {
    long long pom = ile0;
    ile0 = (ile0 * dp[*it][0] + ile1 * dp[*it][1] + ile0) % 1000000007LL;
    ile1 = (pom * dp[*it][1] + ile1 * dp[*it][0] + ile1) % 1000000007LL;
  }
  dp[x][1] += ile1;
  dp[x][0] += ile0;
  reverse(v[x].begin(), v[x].end());
  ile1 = 1;
  ile0 = 0;
  for (__typeof((v[x]).begin()) it = ((v[x]).begin()); it != (v[x]).end();
       it++) {
    long long pom = ile0;
    ile0 = (ile0 * dp[*it][0] + ile1 * dp[*it][1] + ile0) % 1000000007LL;
    ile1 = (pom * dp[*it][1] + ile1 * dp[*it][0] + ile1) % 1000000007LL;
  }
  dp[x][1] += ile1;
  dp[x][0] += ile0;
  dp[x][1] %= 1000000007LL;
  dp[x][0] %= 1000000007LL;
  long long suma_ilo_parz = 0;
  long long suma_ilo_nieparz = 0;
  long long suma2_ilo_parz = 0;
  long long suma2_ilo_nieparz = 0;
  for (__typeof((v[x]).begin()) it = ((v[x]).begin()); it != (v[x]).end();
       it++) {
    long long pom = suma_ilo_parz;
    suma_ilo_parz =
        (suma_ilo_nieparz * dp[*it][1] + suma_ilo_parz) % 1000000007LL;
    suma_ilo_nieparz =
        (pom * dp[*it][1] + suma_ilo_nieparz + dp[*it][1]) % 1000000007LL;
    pom = suma2_ilo_parz;
    suma2_ilo_parz =
        (suma2_ilo_nieparz * dp[*it][0] + suma2_ilo_parz) % 1000000007LL;
    suma2_ilo_nieparz =
        (pom * dp[*it][0] + suma2_ilo_nieparz + dp[*it][0]) % 1000000007LL;
  }
  dp[x][1] =
      (dp[x][1] - suma2_ilo_parz - suma2_ilo_nieparz - 1 + 3 * 1000000007LL) %
      1000000007LL;
  dp[x][0] = (dp[x][0] - suma_ilo_nieparz + 1000000007LL) % 1000000007LL;
}
int main() {
  scanf("%d", &n);
  for (int i = 2; i <= (n); i++) {
    scanf("%d", &x);
    ojc[i] = x;
    v[x].push_back(i);
  }
  licz(1);
  printf("%d\n", (int)((dp[1][0] + dp[1][1]) % 1000000007LL));
  return 0;
}
