#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>

#define fo(i,j,l) for(int i=j;i<=l;++i)
#define fd(i,j,l) for(int i=j;i>=l;--i)

using namespace std;
typedef long long ll;
const ll N=11e4,M=N<<1;

int f[N],fa[N];
int ne[M],lb[M],la[N];
int n,oo;

inline void llb(int a,int b)
{ne[++oo]=la[a]; la[a]=oo; lb[oo]=b;}
 
inline int read()
{
	int o=0; char ch=' ';
	for(;ch<'0'||ch>'9';ch=getchar());
	for(;ch>='0'&&ch<='9';ch=getchar())o=o*10+ch-48;
	return o;
} 

void dfs(int o)
{
	int u=0;
	for(int y=la[o];y;y=ne[y])
	if(!fa[lb[y]]){
		fa[lb[y]]=o,dfs(lb[y]);
		u|=(f[o]&f[lb[y]]);
		f[o]|=f[lb[y]];
	}
	int k=1;
	while(k<=u||(f[o]&k)>0)f[o]^=(k&f[o]),k<<=1;
	f[o]^=k;
}

int main()
{
	cin>>n; int a,b;
	fo(i,1,n-1)a=read(),b=read(),llb(a,b),llb(b,a);
	fa[1]=-1; dfs(1);
	int k=1,p=0;
	while(k<=f[1])k<<=1,++p;
	cout<<p-1;
}