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

-1
 9
 1
 1
 3
 3
 -1
 -1
 1
 1
 1
 5
 1
 5
 -1

import java.io.*;
import java.util.*;
public class Main
{
	int n;
	ArrayList<Integer> list[];
	private void solve()throws IOException
	{
		n=nextInt();
		list=new ArrayList[n+1];
		for(int i=1;i<=n;i++)
			list[i]=new ArrayList<>();
		for(int i=1;i<n;i++)
		{
			int u=nextInt();
			int v=nextInt();
			list[u].add(v);
			list[v].add(u);
		}
		int c=new Diameter(n,list).center();
		ArrayList<Integer> child=new ArrayList<>();
		for(int v:list[c])
		{
			int x=dfs(v,c);
			if(x==-1)
			{
				out.println(-1);
				return;
			}
			else
				child.add(x);
		}
		int first=0,second=0;
		for(int i=0;i<child.size();i++)
			if(first==0)
				first=child.get(i);
			else if(first==child.get(i))
				continue;
			else if(second==0)
				second=child.get(i);
			else if(second==child.get(i))
				continue;
			else
			{
				out.println(-1);
				return;
			}
		int x=first+second;
			while(x%2==0)
				x=x/2;
			out.println(x);
	}
	int dfs(int v,int p)
	{
		int child=0;
		for(int vv:list[v])
			if(vv!=p)
			{
				int x=dfs(vv,v);
				if(x==-1)
					return -1;
				if(child==0)
					child=x;
				else if(child!=x)
					return -1;
			}
		return child+1;
	}
	class Diameter
	{
		int n;
		ArrayList<Integer> list[];
		final int inf=(int)(1e9+1);
		Diameter(int n,ArrayList<Integer> list[])
		{
			this.n=n;
			this.list=list;
		}
		int diameter()
		{
			return farthest(farthest(1).first).second;
		}
		Pair farthest(int v)
		{
			Queue<Integer> queue=new LinkedList<>();
			queue.add(v);
			int dist[]=new int[n+1];
			Arrays.fill(dist,inf);
			dist[v]=0;
			while(!queue.isEmpty())
			{
				int curr=queue.remove();
				for(int next:list[curr])
					if(dist[next]>dist[curr]+1)
					{
						dist[next]=dist[curr]+1;
						queue.add(next);
					}
			}
			Pair max=new Pair(v,0);
			for(int i=1;i<=n;i++)
				if(max.second<dist[i])
					max=new Pair(i,dist[i]);
			return max;
		}
		int center()
		{
			int v=farthest(1).first;
			int r=diameter()/2;
			Queue<Integer> queue=new LinkedList<>();
			queue.add(v);
			int dist[]=new int[n+1];
			Arrays.fill(dist,inf);
			dist[v]=0;
			while(!queue.isEmpty())
			{
				int curr=queue.remove();
				for(int next:list[curr])
					if(dist[next]>dist[curr]+1)
					{
						dist[next]=dist[curr]+1;
						queue.add(next);
					}
			}
			for(int i=1;i<=n;i++)
				if(dist[i]==r)
					return i;
			return -1;
		}
		class Pair{
		    int first,second;
		    Pair(int a,int b){
		        first=a;
		        second=b;
		    }
		}
	}

	 
	///////////////////////////////////////////////////////////

	public void run()throws IOException
	{
		br=new BufferedReader(new InputStreamReader(System.in));
		st=null;
		out=new PrintWriter(System.out);

		solve();
		
		br.close();
		out.close();
	}
	public static void main(String args[])throws IOException{
		new Main().run();
	}
	BufferedReader br;
	StringTokenizer st;
	PrintWriter out;
	String nextToken()throws IOException{
		while(st==null || !st.hasMoreTokens())
		st=new StringTokenizer(br.readLine());
		return st.nextToken();
	}
	String nextLine()throws IOException{
		return br.readLine();
	}
	int nextInt()throws IOException{
		return Integer.parseInt(nextToken());
	}
	long nextLong()throws IOException{
		return Long.parseLong(nextToken());
	}
	double nextDouble()throws IOException{
		return Double.parseDouble(nextToken());
	}
}