#include<bits/stdc++.h>
#define pb push_back

using namespace std;

const int N=100005;

vector<int>e[N];
int mask[N],ans,n,m,cnt[20];

void dfs(int x,int fa){
	for(int v:e[x])if(v!=fa)dfs(v,x);
	memset(cnt,0,sizeof(cnt));
	for(int v:e[x])if(v!=fa)for(int i=0;i<m;i++)cnt[i]+=mask[v]>>i&1;
	int p=-1,q=-1;
	for(int i=m-1;i>=0;i--){
		if(cnt[i]>1){p=i;break;}
		if(cnt[i]==0)q=i;
	}
	if(p==-1)p=q;
	mask[x]+=1<<p;
	for(int i=p;i<m;i++)if(cnt[i])mask[x]+=1<<i;
}

int main(){
	scanf("%d",&n);
	m=log(n)/log(2)+1;
	for(int i=1,u,v;i<n;i++)scanf("%d%d",&u,&v),e[u].pb(v),e[v].pb(u);
	dfs(1,0);
	while((1<<ans)<=mask[1])ans++;
	printf("%d\n",ans-1);
	return 0;
}