#include <bits/stdc++.h>
using namespace std;
const int N = 100005;
vector<int> a[N];
int u[N];
vector<int> s;
int neighbor(int x, int y) {
  static int P[2 * N];
  int nP = 0;
  for (__typeof((a[x]).begin()) it = (a[x]).begin(); it != (a[x]).end(); it++)
    P[nP++] = *it;
  for (__typeof((a[y]).begin()) it = (a[y]).begin(); it != (a[y]).end(); it++)
    P[nP++] = *it;
  P[nP++] = x;
  P[nP++] = y;
  sort(P, P + nP);
  nP = unique(P, P + nP) - P;
  return nP <= 6;
}
void special(int n) {
  int f[10] = {};
  vector<pair<int, int> > P;
  for (int i = 0; i < n; i++) f[i] = i + 1;
  for (int i = 0; i < n * 2; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    if (x > y) swap(x, y);
    P.push_back(make_pair(x, y));
  }
  sort(P.begin(), P.end());
  do {
    f[n] = f[0];
    f[n + 1] = f[1];
    vector<pair<int, int> > R;
    for (int i = 0; i < n; i++) {
      int x = f[i], y = f[i + 1];
      if (x > y) swap(x, y);
      R.push_back(make_pair(x, y));
      x = f[i], y = f[i + 2];
      if (x > y) swap(x, y);
      R.push_back(make_pair(x, y));
    }
    sort(R.begin(), R.end());
    if (P == R) {
      for (int i = 0; i < n; i++) printf("%d ", f[i]);
      return;
    }
  } while (next_permutation(f, f + n));
  puts("-1");
}
int main(void) {
  int n;
  vector<pair<int, int> > W, X;
  scanf("%d", &n);
  if (n <= 7) {
    special(n);
    return 0;
  }
  for (int i = 0; i < 2 * n; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    if (x > y) swap(x, y);
    a[x].push_back(y);
    a[y].push_back(x);
    W.push_back(make_pair(x, y));
  }
  for (int i = 1; i <= n; i++)
    if (((int)(a[i]).size()) > 4) {
      puts("-1");
      return 0;
    }
  u[1] = 1;
  s.push_back(1);
  for (int i = 1; i < n; i++) {
    int x = s.back();
    for (__typeof((a[x]).begin()) it = (a[x]).begin(); it != (a[x]).end();
         it++) {
      int y = *it;
      if (u[y]) continue;
      if (neighbor(x, y)) {
        u[y] = 1;
        s.push_back(y);
        break;
      }
    }
  }
  for (int i = 0; i < ((int)(s).size()); i++) {
    X.push_back(make_pair(s[i], s[(i + 1) % ((int)(s).size())]));
    X.push_back(make_pair(s[i], s[(i + 2) % ((int)(s).size())]));
  }
  for (__typeof((X).begin()) it = (X).begin(); it != (X).end(); it++) {
    if (it->first > it->second) swap(it->first, it->second);
  }
  sort(X.begin(), X.end());
  sort(W.begin(), W.end());
  if (X == W)
    for (__typeof((s).begin()) it = (s).begin(); it != (s).end(); it++) {
      printf("%d ", *it);
    }
  else
    puts("-1");
  return 0;
}
