#include <bits/stdc++.h>
using namespace std;
vector<int> G[100010];
int a[100010], b[4];
bool vis[100010];
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 0; i < n + n; i++) {
    int a, b;
    scanf("%d %d", &a, &b);
    G[a].push_back(b);
    G[b].push_back(a);
  }
  for (int i = 1; i <= n; i++) {
    if (G[i].size() < 4) {
      puts("-1");
      return 0;
    }
  }
  a[0] = 1;
  vis[1] = 1;
  for (int i = 0; i < 4; i++) {
    b[i] = G[1][i];
  }
  for (int i = 0; i < 4; i++) {
    int N = 0;
    for (int j = 0; j < 4; j++) {
      for (int k = 0; k < 4; k++) {
        N += (b[j] == G[b[i]][k]);
      }
    }
    if ((n > 5 && N == 2) || (n <= 5 && N > 2)) {
      a[1] = b[i];
      vis[b[i]] = 1;
      break;
    }
  }
  if (!a[1]) {
    puts("-1");
    return 0;
  }
  for (int u = 2; u < n; u++) {
    int x = a[u - 2], y = a[u - 1], v = -1;
    for (int i = 0; i < 4; i++) {
      for (int j = 0; j < 4; j++) {
        if (G[x][i] == G[y][j] && !vis[G[x][i]]) {
          int N = 0;
          for (int k = 0; k < 4; k++) {
            for (int l = 0; l < 4; l++) {
              if (G[y][k] == G[G[x][i]][l]) {
                N++;
                break;
              }
            }
          }
          if ((n > 5 && N == 2) || (n <= 5 && N > 2)) {
            v = G[x][i];
            break;
          }
        }
      }
    }
    if (v == -1) {
      puts("-1");
      return 0;
    }
    a[u] = v;
    vis[v] = 1;
  }
  int F = 0, g = 0;
  for (int i = 0; i < 4; i++) {
    if (G[a[n - 1]][i] == a[0]) F = 1;
    if (G[a[n - 1]][i] == a[1]) g = 1;
  }
  if (!F || !G) {
    puts("-1");
    return 0;
  }
  for (int i = 0; i < n; i++) {
    printf("%d ", a[i]);
  }
  return 0;
}
