#include<cstdio>
#include<algorithm>

#define rep(i,n) for(int i=0;i<(n);i++)

using namespace std;

typedef long long ll;

int main(){
	int n; scanf("%d",&n);
	static int l[499999],r[499999];
	rep(u,n-1) scanf("%d%d",l+u,r+u), l[u]--, r[u]--;

	static int depth[499999];
	rep(u,n-1){
		if(l[u]!=n-1) depth[l[u]]=depth[u]+1;
		if(r[u]!=n-1) depth[r[u]]=depth[u]+1;
	}

	static int leaf[500000]; // leaf[u] := ( 頂点 u を根とする部分木の葉の数 )
	static ll dp1[500000]; // dp1[u] := ( 頂点 u を根とする部分木について, セーブ機能を使わないときの答え )
	static ll dp2[500000]; // dp2[u] := ( 頂点 u を根とする部分木についての最適解 )
	leaf[n-1]=1;
	for(int u=n-2;u>=0;u--){
		leaf[u]=leaf[l[u]]+leaf[r[u]];

		dp1[u]=leaf[u]+dp1[l[u]]+dp1[r[u]];

		dp2[u]=1+dp2[l[u]]+depth[u]+1+dp2[r[u]];
		dp2[u]=min(dp2[u],leaf[l[u]]+dp1[l[u]]+1+dp2[r[u]]);
		dp2[u]=min(dp2[u],leaf[r[u]]+dp1[r[u]]+1+dp2[l[u]]);
	}

	printf("%lld\n",dp2[0]);

	return 0;
}