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


// ~/BAU/ACM-ICPC/Teams/A++/BlackBurn95

import java.io.*;
import java.util.*;
import java.math.*;
import static java.lang.Math.*;
import static java.lang.Integer.parseInt;
import static java.lang.Long.parseLong;
import static java.lang.Double.parseDouble;
import static java.lang.String.*;

public class Main {

    static int n,root,last,mx;
    static List<Integer> [] g;
    static int [] p;
    static boolean flag;
    
    public static void main(String[] args) throws IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder out = new StringBuilder();
        StringTokenizer tk;

        n = parseInt(in.readLine());
        
        g = new List[n];
        for(int i=0; i<n; i++)
            g[i] = new ArrayList();
        p = new int[n];
        for(int i=1,a,b; i<n; i++) {
            tk = new StringTokenizer(in.readLine());
            a = parseInt(tk.nextToken())-1;
            b = parseInt(tk.nextToken())-1;
            
            g[a].add(b);
            g[b].add(a);
        }
        
        mx = -1;
        dfs1(0,-1,0);
        mx = -1;
        dfs1(last,-1,0);
        
        root = last;
        for(int i=0; i<mx/2; i++)
            root = p[root];
        
        flag = true;
        Set<Integer> res = dfs(root,-1,0);
        
        if(!flag) {
            System.out.println("-1");
            return;
        }
        
        int ans = 0;
        for(int x : res)
            ans += x;
        
        while(ans%2==0)
            ans /= 2;
        
        System.out.println(ans);
    }
    
    static void dfs1(int u,int p1,int dpth) {
        p[u] = p1;
        
        if(dpth > mx) {
            mx = dpth;
            last = u;
        }
        
        for(int v : g[u]) {
            if(v!=p1) {
                dfs1(v,u,dpth+1);
            }
        }
    }
    
    static Set<Integer> dfs(int u,int p1,int dpth) {
        Set<Integer> d = new HashSet();
        if(!flag)
            return d;
        
        boolean isLeaf = true;
        for(int v : g[u]) {
            if(v!=p1) {
                isLeaf = false;
                Set<Integer> r = dfs(v,u,dpth+1);
                
                if(r.size()>1) {
                    flag = false;
                    return r;
                }
                
                d.addAll(r);
            }
        }
        
        if(isLeaf) d.add(dpth);
        
        
        if(d.size()>2 || (d.size()==2 && p1!=-1))
            flag = false;
        
        return d;
    }
}