#include <bits/stdc++.h>
#define N 100005
using namespace std;
struct edge{
	int k,next;
}e[N<<1];
int n,home[N],cnt=-1,lg2[N<<1];
void add(int x,int y){
	cnt++;
	e[cnt].k=y;
	e[cnt].next=home[x];
	home[x]=cnt;
}
int f[N],sum[25];
void dfs(int k,int F){
	for(int i=home[k];~i;i=e[i].next)if(e[i].k!=F){
		dfs(e[i].k,k);
	}
	memset(sum,0,sizeof(sum));
	for(int i=home[k];~i;i=e[i].next)if(e[i].k!=F){
		int g=f[e[i].k],t;
		while(g) t=g&-g,sum[lg2[t]]++,g-=t;
	}
	int o=0;
	for(int i=20;~i;i--){
		if(sum[i]){
			if(!o) o=(1<<i);
			if(sum[i]>1){
				i++;
				while(sum[i]){
					f[k]^=(1<<i);
					i++;
				}
				f[k]|=(1<<i);
				return;
			}
			f[k]|=(1<<i);
		}else if(o){
			int h=0,g;
			while(i>=0){
				if(!sum[i]) g=(1<<i)|h;
				else h|=(1<<i);
				if(sum[i]>1) break;
				i--;
			}
			f[k]|=g;
			return;
		}
	}
	f[k]=o+o;
	if(!f[k]) f[k]=1;
}
int main(){
	//freopen("test.in","r",stdin);
	memset(home,-1,sizeof(home));
	for(int i=2;i<=200000;i++) lg2[i]=lg2[i>>1]+1;
	scanf("%d",&n);
	for(int i=1,x,y;i<n;i++){
		scanf("%d%d",&x,&y);
		add(x,y);add(y,x);
	}
	dfs(1,0);
	printf("%d\n",lg2[f[1]]);
	return 0;
}