#include <bits/stdc++.h>
using namespace std;
template <class T>
T sqr(T x) {
  return x * x;
}
template <class T>
T binPow(T p, int q, int MOD) {
  if (q == 1) return p % MOD;
  if (q & 1)
    return p * (binPow(p, q - 1, MOD) % MOD) % MOD;
  else
    return sqr(binPow(p, q / 2, MOD) % MOD) % MOD;
}
const double PI = acos(-1.0);
const int delta[] = {1, 2};
int n, answer[100001];
vector<int> adj[100001];
bool visit[100001];
bool exist(int idx, int number) {
  return find(adj[idx].begin(), adj[idx].end(), number) != adj[idx].end();
}
bool dfs(int order) {
  if (order == n) return true;
  for (int j = 0; j < ((int)adj[answer[order - 1]].size()); j++) {
    int i = adj[answer[order - 1]][j];
    if (!visit[i]) {
      if (!exist(answer[order - 1], i) || !exist(answer[order - 2], i))
        continue;
      answer[order] = i;
      visit[i] = true;
      return dfs(order + 1);
      visit[i] = false;
    }
  }
  return false;
}
int main() {
  ios::sync_with_stdio(false);
  cin >> n;
  for (int i = 0; i < 2 * n; i++) {
    int p, q;
    cin >> p >> q;
    --p;
    --q;
    adj[p].push_back(q);
    adj[q].push_back(p);
  }
  for (int i = 0; i < n; i++)
    if (((int)adj[i].size()) != 4) {
      cout << -1 << endl;
      return 0;
    }
  if (n == 5) {
    cout << "1 2 3 4 5" << endl;
  } else if (n == 6) {
    int order[] = {0, 1, 2, 3, 4, 5};
    do {
      bool can = true;
      for (int i = 0; i < 6; i++) {
        for (int j = 0; j < 2; j++)
          if (!exist(order[(i - delta[j] + 6) % 6], order[i])) {
            can = false;
            break;
          }
        for (int j = 0; j < 2; j++)
          if (!exist(order[i], order[(i + delta[j]) % 6])) {
            can = false;
            break;
          }
        if (!can) break;
      }
      if (can) {
        for (int i = 0; i < 6; i++) cout << order[i] + 1 << " ";
        cout << endl;
        break;
      }
    } while (next_permutation(order, order + 6));
  } else {
    answer[0] = 0;
    for (int k = 0; k < ((int)adj[0].size()); k++)
      for (int kk = 0; kk < ((int)adj[adj[0][k]].size()); kk++) {
        int i = adj[0][k], j = adj[i][kk];
        if (exist(0, i) && exist(0, j) && exist(i, j)) {
          answer[1] = i;
          answer[2] = j;
          memset(visit, false, sizeof visit);
          visit[0] = visit[i] = visit[j] = true;
          if (dfs(3)) {
            for (int i = 0; i < n; i++) cout << answer[i] + 1 << " ";
            cout << endl;
            return 0;
          }
        }
      }
    puts("-1");
  }
}
