#include <bits/stdc++.h>
using namespace std;
vector<int> tab[100100], ans;
int n, ls[10];
bool used[100100];
bool chek(int a, int b) {
  for (int i = 0; i < 4; i++)
    if (tab[a][i] == b) return true;
  return false;
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n + n; i++) {
    int a, b;
    scanf("%d%d", &a, &b);
    if (a == b) {
      puts("-1");
      return 0;
    }
    tab[a].push_back(b);
    tab[b].push_back(a);
  }
  for (int i = 1; i <= n; i++) {
    if (tab[i].size() != 4) {
      puts("-1");
      return 0;
    }
  }
  if (n <= 10) {
    int ar[30] = {};
    for (int i = 0; i < n; i++) ar[i] = i + 1;
    do {
      ar[n] = ar[0];
      ar[n + 1] = ar[1];
      bool ok = true;
      for (int i = 0; i < n; i++) {
        if (!chek(ar[i], ar[i + 1]) || !chek(ar[i], ar[i + 2])) {
          ok = false;
          break;
        }
      }
      if (ok) {
        for (int i = 0; i < n; i++)
          printf("%d%c", ar[i], i == n - 1 ? '\n' : ' ');
        return 0;
      }
    } while (std::next_permutation(ar, ar + n));
    puts("-1");
    return 0;
  }
  int start = 1, pre = -1;
  while (!used[start]) {
    used[start] = true;
    ans.push_back(start);
    int nxt = start;
    for (int i = 0; i < 4; i++) {
      int cnt = 0;
      for (int j = 0; j < 4; j++)
        if (chek(tab[start][i], tab[start][j])) cnt++;
      if (cnt == 2 && tab[start][i] != pre) {
        nxt = tab[start][i];
        break;
      }
    }
    if (nxt == start) {
      puts("-1");
      return 0;
    }
    pre = start;
    start = nxt;
  }
  if ((int)ans.size() < n) {
    puts("-1");
    return 0;
  }
  ans.push_back(ans[0]);
  ans.push_back(ans[1]);
  for (int i = 0; i < n; i++) {
    if (!chek(ans[i], ans[i + 1]) || !chek(ans[i], ans[i + 2])) {
      puts("-1");
      return 0;
    }
  }
  for (int i = 0; i < n; i++) printf("%d%c", ans[i], i == n - 1 ? '\n' : ' ');
  return 0;
}
