Example

Input

4
1 1 2


Output

6
#include <iostream>
#include <cstdio>
#include <queue>
#include <vector>
using namespace std;
#define rep(i,n) for(int i=0;i<(n);++i)
#define rep1(i,n) for(int i=1;i<=(n);++i)
#define ALL(c) (c).begin(),(c).end()
int parent[17][100000],depth[100000];
vector<int> G[100000];
void dfs(int v,int p,int d){
	parent[0][v]=p;
	depth[v]=d;
	rep(i,G[v].size()) dfs(G[v][i],v,d+1);
}
void init(int n){
	dfs(0,-1,0);
	rep(i,16){
		rep(j,n){
			if(parent[i][j]<0) parent[i+1][j]=-1;
			else parent[i+1][j]=parent[i][parent[i][j]];
		}
	}
}
int lca(int u,int v){
	if(depth[u]>depth[v]) swap(u,v);
	rep(i,17) if(((depth[v]-depth[u])>>i) & 1) v=parent[i][v];
	if(u==v) return u;
	for(int i=16;i>=0;i--){
		if(parent[i][u]!=parent[i][v]){
			u=parent[i][u];
			v=parent[i][v];
		}
	}
	return parent[0][u];
}
int main(){
	int n,cnt=0,prev=0;
	long long ans=0;
	cin >> n;
	rep1(i,n-1){
		int p;
		cin >> p;
		G[p-1].push_back(i);
	}
	init(n);
	queue<int> q;
	q.push(0);
	while(!q.empty()){
		int p=q.front();
		q.pop();
		ans+=(depth[p]+depth[prev]-2*depth[lca(p,prev)]);
		rep(i,G[p].size()) q.push(G[p][i]);
		prev=p;
	}
	cout << ans << endl;
	return 0;
}