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

#include <bits/stdc++.h>
using namespace std;
const int MAXN = (1 << 20);
const int inf = (int)1e7 + 42;
int n;
vector<int> G[MAXN];
void read() {
  cin >> n;
  for (int i = 0; i < n - 1; i++) {
    int u, v;
    cin >> u >> v;
    G[u].push_back(v);
    G[v].push_back(u);
  }
}
int cnt_vers = 0, tr_sz[MAXN];
int pre_dfs(int u, int pr) {
  cnt_vers++;
  tr_sz[u] = 1;
  for (int v : G[u])
    if (v != pr) tr_sz[u] += pre_dfs(v, u);
  return tr_sz[u];
}
int centroid(int u, int pr) {
  for (int v : G[u])
    if (v != pr && tr_sz[v] > cnt_vers / 2) return centroid(v, u);
  return u;
}
int dfs(int u, int pr) {
  vector<int> li;
  int cnt = 0;
  for (int v : G[u])
    if (v != pr) {
      int add = 1, val = dfs(v, u);
      for (int x : li)
        if (x == val) {
          add = 0;
          break;
        }
      if (add) cnt++, li.push_back(val);
      if (cnt > 2) return inf;
    }
  if (cnt >= 2 && pr != -1) return inf;
  int ans = 0;
  for (int x : li) ans += x;
  return li.size() + ans;
}
int f(int root) {
  int ret = dfs(root, -1);
  if (ret >= inf) return inf;
  while (ret % 2 == 0) ret /= 2;
  return ret;
}
int d[MAXN];
void ddfs(int u, int pr) {
  d[u] = d[pr] + 1;
  for (int v : G[u])
    if (v != pr) ddfs(v, u);
}
int mx[MAXN];
void dcdfs(int u, int pr) {
  d[u] = d[pr] + 1;
  mx[u] = min(mx[u], d[u]);
  for (int v : G[u])
    if (v != pr) dcdfs(v, u);
}
bool lol_dfs(int u, int pr = -1) {
  int cnt = 0;
  for (int v : G[u]) {
    if (v != pr && lol_dfs(v, u)) return 1;
    if (v != pr) cnt++;
  }
  return cnt >= 2;
}
void solve() {
  int ans = inf;
  pre_dfs(1, 1);
  ans = min(ans, f(centroid(1, 1)));
  d[1] = 0;
  ddfs(1, 1);
  int d1 = 1, d2 = 1;
  for (int i = 1; i <= n; i++)
    if (d[d1] < d[i]) d1 = i;
  d[d1] = 0;
  ddfs(d1, d1);
  for (int i = 1; i <= n; i++)
    if (d[d2] < d[i]) d2 = i;
  for (int i = 1; i <= n; i++) mx[i] = inf;
  d[d1] = 0;
  dcdfs(d1, d1);
  d[d2] = 0;
  dcdfs(d2, d2);
  int x = 1;
  for (int i = 1; i <= n; i++)
    if (mx[x] < mx[i]) x = i;
  int cn = 0;
  for (int i = 1; i <= n; i++)
    if (mx[x] == mx[i]) {
      ans = min(ans, f(i));
      cn++;
      if (cn == 10) break;
    }
  ans = min(f(d1), ans);
  ans = min(f(d2), ans);
  for (int i = 0; i < 2; i++) {
    int v = rand() % n + 1;
    ans = min(ans, f(v));
  }
  if (ans >= inf) ans = -1;
  while (ans % 2 == 0) ans /= 2;
  cout << ans << '\n';
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  read();
  solve();
  return 0;
}
