#include <bits/stdc++.h>
using namespace std;
const int N = 200010;
int ans, head[N], a[N], c[N], dep[N], dd[N];
bool v[N], T[N], b[N], s1[N], s2[N], s3[N], s4[N], ok[N];
struct edge {
  int to, next;
} e[2 * N];
void push(int k, int first, int second) {
  e[k].to = second;
  e[k].next = head[first];
  head[first] = k;
}
void dfs1(int k) {
  v[k] = 1;
  int p = head[k], w = -1;
  dep[k] = 0;
  ok[k] = 1;
  while (p) {
    if (!v[e[p].to]) {
      dfs1(e[p].to);
      ok[k] &= ok[e[p].to];
      if (w != -1 && dep[e[p].to] != w) ok[k] = 0;
      w = dep[e[p].to];
      dep[k] = max(dep[k], dep[e[p].to] + 1);
    }
    p = e[p].next;
  }
}
int h(int first) {
  while (first % 2 == 0) first /= 2;
  return first;
}
void dfs2(int k, int d) {
  int cnt = 0, p = head[k];
  bool t = 1;
  while (p) {
    if (!v[e[p].to]) {
      a[++cnt] = dep[e[p].to] + 1;
      t &= ok[e[p].to];
    }
    p = e[p].next;
  }
  if (k != 1) a[++cnt] = d;
  sort(a + 1, a + cnt + 1);
  if (t) {
    if (a[1] == a[cnt])
      ans = min(ans, h(a[1]));
    else {
      int s = 0;
      for (int i = 1; i < cnt; i++)
        if (a[i] != a[i + 1]) s++;
      if (s < 2) ans = min(ans, h(a[1] + a[cnt]));
    }
  }
  v[k] = 1;
  p = head[k];
  cnt = 0;
  while (p) {
    if (!v[e[p].to]) {
      a[++cnt] = dep[e[p].to];
      b[cnt] = ok[e[p].to];
      c[cnt] = e[p].to;
    }
    p = e[p].next;
  }
  s1[1] = s1[0] = 1;
  for (int i = 2; i <= cnt; i++) s1[i] = s1[i - 1] & (a[i] == a[i - 1]);
  s2[cnt] = s2[cnt + 1] = 1;
  for (int i = cnt - 1; i > 0; i--) s2[i] = s2[i + 1] & (a[i] == a[i + 1]);
  s3[0] = 1;
  for (int i = 1; i <= cnt; i++) s3[i] = s3[i - 1] & b[i];
  s4[cnt + 1] = 1;
  for (int i = cnt; i > 0; i--) s4[i] = s4[i + 1] & b[i];
  for (int i = 1; i <= cnt; i++)
    if (s1[i - 1] && s2[i + 1] && s3[i - 1] && s4[i + 1]) {
      if (i >= 2 && i + 1 <= cnt && a[i - 1] != a[i + 1]) continue;
      if (k > 1 && i >= 2 && a[i - 1] + 1 != d) continue;
      if (k > 1 && i + 1 <= cnt && a[i + 1] + 1 != d) continue;
      T[c[i]] = 1;
      dd[c[i]] = d + 1;
      if (k == 1) {
        if (i > 1) dd[c[i]] = a[i - 1] + 2;
        if (i + 1 <= cnt) dd[c[i]] = a[i + 1] + 2;
      }
    }
  p = head[k];
  while (p) {
    if ((!v[e[p].to]) && T[e[p].to]) dfs2(e[p].to, dd[e[p].to]);
    p = e[p].next;
  }
}
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 1; i < n; i++) {
    int first, second;
    scanf("%d%d", &first, &second);
    push(2 * i - 1, first, second);
    push(2 * i, second, first);
  }
  memset(v, 0, sizeof(v));
  dfs1(1);
  ans = n + 1;
  memset(v, 0, sizeof(v));
  memset(T, 0, sizeof(T));
  dfs2(1, 0);
  if (ans <= n)
    printf("%d\n", ans);
  else
    puts("-1");
  return 0;
}
