#include <bits/stdc++.h>
using namespace std;
vector<int> ad[100000];
int ans[100000];
bool used[100000];
int d[4] = {-2, -1, 1, 2};
int n;
bool check() {
  int i, j, k;
  memset(used, false, sizeof(used));
  used[ans[0]] = true;
  used[ans[1]] = true;
  used[ans[2]] = true;
  used[ans[3]] = true;
  for (i = 2; i < n - 2; i++) {
    for (j = 0; j < 4; j++) {
      if (used[ad[ans[i]][j]]) continue;
      for (k = 0; k < 3; k++)
        if (ad[ans[i]][j] == ans[i + d[k]]) break;
      if (k == 3) {
        ans[i + 2] = ad[ans[i]][j];
        used[ad[ans[i]][j]] = true;
        break;
      }
    }
  }
  for (i = 0; i < n; i++) {
    for (j = 0; j < 4; j++) {
      for (k = 0; k < 4; k++) {
        if (ad[ans[i]][j] == ans[(n + i + d[k]) % n]) break;
      }
      if (k == 4) {
        return false;
      }
    }
  }
  return true;
}
int main() {
  int i, j, k, l;
  scanf("%d", &n);
  for (i = 0; i < n * 2; i++) {
    int a, b;
    scanf("%d %d", &a, &b);
    a--;
    b--;
    ad[a].push_back(b);
    ad[b].push_back(a);
  }
  for (i = 0; i < n; i++) {
    if (ad[i].size() != 4) {
      printf("-1\n");
      return 0;
    }
  }
  for (i = 0; i < n; i++) ans[i] = 0;
  ans[0] = 0;
  for (i = 0; i < 4; i++) {
    ans[1] = ad[0][i];
    for (j = 0; j < 4; j++) {
      ans[2] = ad[ans[1]][j];
      for (k = 0; k < 4; k++)
        if (ad[ans[2]][k] == 0) break;
      if (k == 4) continue;
      for (k = 0; k < 4; k++) {
        ans[3] = ad[ans[2]][k];
        for (l = 0; l < 4; l++)
          if (ad[ans[3]][l] == ans[1]) break;
        if (l != 4) {
          if (check()) {
            for (l = 0; l < n; l++) printf("%d ", ans[l] + 1);
            printf("\n");
            return 0;
          }
        }
      }
    }
  }
  printf("-1\n");
  return 0;
}
