#include #include using namespace std; using namespace atcoder; using ll=long long; using ld=long double; ld pie=3.141592653589793; ll inf=144499999999994; ll mod=1000000007; ll op(ll a,ll b){ return a+b; } ll e(){ return 0; } ll ans=0; void dfs(ll now,segtree&seg,vector>&g,vector&memo){ memo[now]=1; ans+=seg.prod(0,now); seg.set(now,1); for (ll i = 0; i < g[now].size(); i++) { if (memo[g[now][i]]==0) { dfs(g[now][i],seg,g,memo); } } seg.set(now,0); } int main(){ ll n; cin >> n; vectora(n); vector>g(n); for (ll i = 0; i < n-1; i++) { cin >> a[i]; g[a[i]].push_back(i+1); } vectormemo(n+10,0); segtreeseg(memo); dfs(0,seg,g,memo); cout << ans << endl; }