#include <bits/stdc++.h>
using namespace std;
int n;
vector<vector<int> > adjlst;
vector<int> res;
int dir[] = {-2, -1, 1, 2};
set<int> vis;
bool findRes(int adj, int i, int lim) {
  for (int d = 0; d < lim; d++) {
    int idx = (i + dir[d] + n) % n;
    if (res[idx] == adj) return 1;
  }
  return 0;
}
bool valid() {
  vis.clear();
  vis.insert(res[0]), vis.insert(res[1]), vis.insert(res[2]),
      vis.insert(res[n - 1]), vis.insert(res[n - 2]);
  for (int i = 1; i <= n - 5; i += 1) {
    int num = res[i];
    int mis = -1, cnt = 0;
    for (int j = 0; j < ((int)(adjlst[num]).size()); j++) {
      int adj = adjlst[num][j];
      if (findRes(adj, i, 3)) continue;
      ++cnt;
      mis = adj;
    }
    if (cnt != 1) return 0;
    if (res[(i + 2) % n] > -1 && res[(i + 2) % n] != mis) return 0;
    if (vis.count(mis)) continue;
    res[(i + 2) % n] = mis;
  }
  for (int i = n - 4; i <= n - 1; i += 1) {
    int num = res[i];
    for (int j = 0; j < ((int)(adjlst[num]).size()); j++) {
      int adj = adjlst[num][j];
      if (findRes(adj, i, 4)) continue;
      return 0;
    }
  }
  return 1;
}
int main() {
  scanf("%d", &n);
  adjlst.resize(n + 5);
  int a, b;
  for (int i = 0; i < 2 * n; i++) {
    scanf("%d%d", &a, &b);
    adjlst[a].push_back(b);
    adjlst[b].push_back(a);
  }
  for (int i = 1; i <= n; i += 1)
    if (((int)(adjlst[i]).size()) != 4) {
      printf("-1");
      return 0;
    }
  vector<int> one = adjlst[1];
  sort((one).begin(), (one).end());
  do {
    res = vector<int>(n, -1);
    res[n - 2] = one[0], res[n - 1] = one[1], res[0] = 1, res[1] = one[2],
            res[2] = one[3];
    if (valid()) {
      for (int i = 0; i < n; i++) printf("%d ", res[i]);
      return 0;
    }
  } while (next_permutation((one).begin(), (one).end()));
  printf("-1");
  return 0;
}
