#include <bits/stdc++.h>
using namespace std;
#pragma comment(linker, "/STACK:100000000")
vector<int> mp[100100];
vector<int> v;
int checkk[111111];
int cntt[111111];
int get_n(int a, int b) {
  int res = 0;
  for (int i = 0, maxi = (int)mp[a].size(); i < maxi; i++) {
    for (int j = 0, maxj = (int)mp[b].size(); j < maxj; j++) {
      if (mp[a][i] == mp[b][j]) {
        res++;
        break;
      }
    }
  }
  return res;
}
int main() {
  int n;
  scanf("%d", &n);
  if (n == 5) {
    vector<int> ans;
    int cnt[6];
    for (int i = 0; i < 6; i++) cnt[i] = 0;
    for (int i = 0; i < 2 * n; i++) {
      int a, b;
      scanf("%d %d", &a, &b);
      if (a == b) {
        printf("-1");
        return 0;
      }
      cnt[a]++;
      cnt[b]++;
      if (i % 2 == 0) {
        ans.push_back(i / 2 + 1);
      }
    }
    for (int i = 1; i <= 5; i++) {
      if (cnt[i] != 4) {
        printf("-1\n");
        return 0;
      }
    }
    for (int i = 0, maxi = ans.size(); i < maxi; i++) {
      if (i != 0) printf(" ");
      printf("%d", ans[i]);
    }
    return 0;
  }
  if (n == 6) {
    vector<int> ans;
    int cnt[7];
    for (int i = 0; i < 7; i++) cnt[i] = 0;
    queue<int> q;
    set<int> st;
    int matrix[7][7];
    for (int i = 0; i < 7; i++) {
      for (int j = 0; j < 7; j++) {
        matrix[i][j] = 0;
      }
    }
    for (int i = 0; i < 2 * n; i++) {
      int a, b;
      scanf("%d %d", &a, &b);
      if (a == b) {
        printf("-1");
        return 0;
      }
      matrix[a][b] = 1;
      matrix[b][a] = 1;
      cnt[a]++;
      cnt[b]++;
    }
    for (int i = 1; i <= 6; i++) {
      if (cnt[i] != 4) {
        printf("-1\n");
        return 0;
      }
    }
    for (int i = 1; i <= n; i++) {
      if (st.find(i) == st.end()) {
        for (int j = 1; j <= n; j++) {
          if (matrix[i][j] == 0 && i != j) {
            st.insert(j);
            q.push(j);
            ans.push_back(i);
            break;
          }
        }
      }
    }
    while (!q.empty()) {
      int a = q.front();
      q.pop();
      ans.push_back(a);
    }
    for (int i = 0, maxi = ans.size(); i < maxi; i++) {
      if (i != 0) printf(" ");
      printf("%d", ans[i]);
    }
    return 0;
  }
  int cur;
  for (int i = 0; i < 111111; i++) cntt[i] = 0;
  for (int i = 0; i < 2 * n; i++) {
    int a, b;
    scanf("%d %d", &a, &b);
    if (a == b) {
      printf("-1");
      return 0;
    }
    cntt[a]++;
    cntt[b]++;
    mp[a].push_back(b);
    mp[b].push_back(a);
    cur = a;
  }
  for (int i = 1; i <= n; i++) {
    if (cntt[i] != 4) {
      printf("-1\n");
      return 0;
    }
  }
  int lastt = -1;
  v.push_back(cur);
  for (int i = 0; i < 111111; i++) checkk[i] = 0;
  checkk[cur] = 1;
  int val = 1;
  for (int j = 1; j < n; j++) {
    int temp = (int)mp[cur].size();
    for (int i = 0, maxi = temp; i < maxi; i++) {
      int cnt = get_n(cur, mp[cur][i]);
      if (cnt == 2 && mp[cur][i] != lastt) {
        lastt = cur;
        cur = mp[cur][i];
        v.push_back(cur);
        checkk[cur]++;
        val++;
        if (checkk[cur] > 1) {
          printf("-1\n");
          return 0;
        }
        break;
      }
    }
  }
  if (val != n) {
    printf("-1");
    return 0;
  }
  for (int i = 0, maxi = (int)v.size(); i < maxi; i++) {
    if (i != 0) printf(" ");
    printf("%d", v[i]);
  }
  return 0;
}
