#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 5;
vector<int> ve[maxn];
int n;
int rt, RTS;
int sz[maxn];
void dfs(int x, int ba) {
  sz[x] = 1;
  int sso = 0;
  for (auto y : ve[x]) {
    if (y != ba) {
      dfs(y, x);
      sz[x] += sz[y];
      sso = max(sso, sz[y]);
    }
  }
  sso = max(sso, n - sz[x]);
  if (sso < RTS) {
    RTS = sso;
    rt = x;
  }
}
int dy[maxn];
bool fl;
int a[maxn];
void dds(int x, int ba, int dp) {
  if (!a[dp])
    a[dp] = ve[x].size();
  else if (a[dp] != ve[x].size())
    fl = 1;
  sz[x] = 1;
  for (auto y : ve[x]) {
    if (y != ba) {
      dds(y, x, dp + 1);
      sz[x] += sz[y];
    }
  }
  if (ve[x].size() == 1) dy[dp] = x;
}
bool OK() {
  fl = 0;
  memset(a, 0, sizeof a);
  for (auto y : ve[rt]) dds(y, rt, 1);
  if (fl) return 0;
  for (int i = 1; i < ve[rt].size(); i++) {
    if (sz[ve[rt][i]] != sz[ve[rt][0]]) return 0;
  }
  return 1;
}
int main() {
  scanf("%d", &n);
  if (n <= 3) {
    puts("1");
    return 0;
  }
  for (int i = 1; i < n; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    ve[x].push_back(y);
    ve[y].push_back(x);
  }
  RTS = n;
  dfs(1, 0);
  if (OK()) {
    printf("%d", rt);
    return 0;
  }
  for (int i = 0; i < n; i++) {
    if (!dy[i]) continue;
    rt = dy[i];
    if (OK()) {
      printf("%d", rt);
      return 0;
    }
  }
  puts("-1");
}
