We will recursively define uninity of a tree, as follows: (Uni is a Japanese word for sea urchins.)

* A tree consisting of one vertex is a tree of uninity 0.
* Suppose there are zero or more trees of uninity k, and a vertex v. If a vertex is selected from each tree of uninity k and connected to v with an edge, the resulting tree is a tree of uninity k+1.



It can be shown that a tree of uninity k is also a tree of uninity k+1,k+2,..., and so forth.

You are given a tree consisting of N vertices. The vertices of the tree are numbered 1 through N, and the i-th of the N-1 edges connects vertices a_i and b_i.

Find the minimum k such that the given tree is a tree of uninity k.

Constraints

* 2 ≦ N ≦ 10^5
* 1 ≦ a_i, b_i ≦ N(1 ≦ i ≦ N-1)
* The given graph is a tree.

Input

The input is given from Standard Input in the following format:


N
a_1 b_1
:
a_{N-1} b_{N-1}


Output

Print the minimum k such that the given tree is a tree of uninity k.

Examples

Input

7
1 2
2 3
2 4
4 6
6 7
7 5


Output

2


Input

12
1 2
2 3
2 4
4 5
5 6
6 7
7 8
5 9
9 10
10 11
11 12


Output

3
#include<cstdio>
#include<cstring>
#include<algorithm>
#define rep(a,b,c) for (int a=b;a<=c;a++)
#define per(a,b,c) for (int a=b;a>=c;a--)
#define go(u) for (int o=ft[u],v;v=E[o].t;o=E[o].n)
#define fi first
#define se second
using namespace std;
typedef long long LL;
typedef pair<int,int> par;
const int N=100010;
int ft[N],dp[N],n,tot;
struct edge{int t,n;}E[N<<1];
void add(int x,int y){
	E[++tot]=(edge){y,ft[x]},ft[x]=tot;
}
void dfs(int u,int f=0){
	go(u) if (v!=f){
		dfs(v,u);
		dp[u]|=dp[v];
	}
	int bit;
	for (bit=1<<28;bit;bit>>=1){
		int cnt=0;
		go(u) if (v!=f){
			if (dp[v]&bit) ++cnt;
		}
		if (cnt>1) break;
	}
	bit<<=1;
	if (!bit) bit=1;
	for (;;bit<<=1){
		int cnt=0;
		go(u) if (v!=f){
			if (dp[v]&bit) ++cnt;
		}
		if (!cnt) break;
	}
	dp[u]|=bit;
	dp[u]&=~(bit-1);
}
int main(){
	scanf("%d",&n);
	rep(i,2,n){
		int x,y;
		scanf("%d%d",&x,&y);
		add(x,y),add(y,x);
	}
	dfs(1);
	per(i,28,0) if (dp[1]&1<<i){
		printf("%d\n",i);
		break;
	}
	return 0;
}
