#include <bits/stdc++.h>
using namespace std;
int n;
int f[111111][10];
int a[111111], num[5];
bool use[111111], found;
bool getRem() {
  for (int i = 3; i <= n - 1; ++i) {
    int u, v;
    found = false;
    for (int p = 1; p <= 4; ++p) {
      u = f[a[i - 1]][p];
      if (use[u]) continue;
      for (int q = 1; q <= 4; ++q)
        if (f[a[i - 2]][q] == u) {
          use[u] = true;
          a[i] = u;
          found = true;
        }
      if (found) break;
    }
    if (!found) {
      return false;
    }
  }
  return true;
}
bool check() {
  bool t1, t2, t3, t4, t5;
  t1 = t2 = t3 = t4 = t5 = false;
  for (int i = 1; i <= 4; ++i) {
    if (f[a[n]][i] == a[1]) t1 = true;
    if (f[a[n]][i] == a[2]) t2 = true;
    if (f[a[n]][i] == a[n - 1]) t3 = true;
    if (f[a[n]][i] == a[n - 2]) t4 = true;
  }
  if (t1 == true && t2 == true && t3 == true && t4 == true) t5 = true;
  return t5;
}
void print() {
  for (int i = 1; i <= n - 1; ++i) cout << a[i] << " ";
  cout << a[n] << endl;
  exit(0);
}
int main() {
  ios::sync_with_stdio(false);
  cin >> n;
  for (int i = 1; i <= 2 * n; ++i) {
    int u, v;
    cin >> u >> v;
    f[u][++f[u][0]] = v;
    f[v][++f[v][0]] = u;
  }
  a[1] = 1;
  found = false;
  for (int p = 1; p <= 4; ++p) {
    for (int q = 1; q <= 4; ++q)
      if (p != q) {
        int u = f[1][p];
        int v = f[1][q];
        for (int r = 1; r <= 4; ++r)
          if (f[u][r] == v) {
            memset(use, false, sizeof(use));
            use[1] = true;
            a[n] = a[0] = u, a[2] = v;
            use[u] = use[v] = true;
            if (getRem() && check()) {
              print();
              return 0;
            }
          }
      }
  }
  cout << -1 << endl;
  return 0;
}
