#include <bits/stdc++.h>
using namespace std;
pair<int, int> ke[100005];
vector<int> a[100005], res;
map<pair<int, int>, int> mm;
int n, sl[100005], b[100005];
bool dd[100005];
void process() {
  for (int i = (1); i <= (n); i++)
    if (a[i].size() != 4) {
      cout << -1 << endl;
      exit(0);
    }
  for (int i = (1); i <= (n); i++) {
    for (int j = 0; j < (4); j++) sl[a[i][j]] = 0;
    for (int j = 0; j < (4); j++) {
      for (int k = (j + 1); k <= (3); k++) {
        int u = a[i][j], v = a[i][k];
        if (u > v) swap(u, v);
        if (mm.find(make_pair(u, v)) != mm.end()) {
          sl[u]++;
          sl[v]++;
        }
      }
    }
    for (int j = 0; j < (4); j++) {
      for (int k = (j + 1); k <= (3); k++) {
        int u = a[i][j], v = a[i][k];
        if (sl[u] == 2 && sl[v] == 2) {
          ke[i] = make_pair(u, v);
        }
      }
    }
  }
  for (int i = (1); i <= (n); i++)
    if (ke[i] == make_pair(0, 0)) {
      cout << -1 << endl;
      exit(0);
    }
}
void ghi() {
  res.push_back(1);
  dd[1] = true;
  int cur = 1;
  while (res.size() < n) {
    int u = ke[cur].first, v = ke[cur].second;
    if (!dd[u]) {
      res.push_back(u);
      dd[u] = true;
      cur = u;
    } else if (!dd[v]) {
      res.push_back(v);
      dd[v] = true;
      cur = v;
    } else {
      cout << -1 << endl;
      exit(0);
    }
  }
  for (int i = 0; i < (res.size()); i++) printf("%d ", res[i]);
}
bool check() {
  for (int i = (1); i <= (n); i++) {
    int u = b[i], v = b[i + 1];
    if (i == n) v = b[1];
    if (u > v) swap(u, v);
    if (mm.find(make_pair(u, v)) == mm.end()) return false;
    u = b[i];
    v = b[i + 2];
    if (i >= n - 1) v = b[2 + i - n];
    if (u > v) swap(u, v);
    if (mm.find(make_pair(u, v)) == mm.end()) return false;
  }
  return true;
}
void duyet(int i) {
  if (i > n) {
    if (check()) {
      for (int j = (1); j <= (n); j++) cout << b[j] << ' ';
      cout << endl;
      exit(0);
    }
    return;
  }
  for (int j = (2); j <= (n); j++)
    if (!dd[j]) {
      dd[j] = true;
      b[i] = j;
      duyet(i + 1);
      dd[j] = false;
    }
}
void xulirieng() {
  b[1] = 1;
  duyet(2);
  cout << -1 << endl;
}
int main() {
  cin >> n;
  for (int i = (1); i <= (2 * n); i++) {
    int u, v;
    scanf("%d%d", &u, &v);
    if (u > v) swap(u, v);
    mm[make_pair(u, v)] = 1;
    a[u].push_back(v);
    a[v].push_back(u);
  }
  if (n <= 6)
    xulirieng();
  else {
    process();
    ghi();
  }
  return 0;
}
