#include <bits/stdc++.h>
using namespace std;
pair<int, int> pairs[2 * 100000 + 10];
vector<int> adj[100000 + 10];
bool done[100000 + 10];
int result[100000 + 10];
void check(int N) {
  bool adj[N + 2][N + 2];
  memset(adj, false, sizeof(adj));
  for (int i = 1; i <= 2 * N; i++) {
    scanf("%d %d", &pairs[i].first, &pairs[i].second);
    adj[pairs[i].first][pairs[i].second] = true;
    adj[pairs[i].second][pairs[i].first] = true;
  }
  int A[N];
  for (int i = 0; i < N; i++) A[i] = i + 1;
  do {
    bool found = true;
    for (int i = 0; i < N; i++)
      if (!(adj[A[i]][A[(i + 1) % N]] && adj[A[i]][A[(i + 2) % N]]))
        found = false;
    if (found) {
      for (int i = 0; i < N; i++) printf("%d ", A[i]);
      printf("\n");
      return;
    }
  } while (next_permutation(A, A + N));
  printf("-1\n");
}
bool contains(int a, int b) {
  for (int i = 0; i < adj[a].size(); i++)
    if (adj[a][i] == b) return true;
  return false;
}
int main() {
  int N;
  scanf("%d", &N);
  if (N == 5 || N == 6) {
    check(N);
    return 0;
  }
  for (int i = 1; i <= 2 * N; i++) {
    scanf("%d %d", &pairs[i].first, &pairs[i].second);
    adj[pairs[i].first].push_back(pairs[i].second);
    adj[pairs[i].second].push_back(pairs[i].first);
  }
  int prev = 1;
  done[1] = true;
  result[0] = 1;
  int candidate[4 + 1], counts[4 + 1], num;
  for (int i = 1; i <= N; i++)
    if (adj[i].size() != 4) {
      printf("-1\n");
      return 0;
    }
  for (int i = 1; i < N; i++) {
    int num = 0;
    for (int j = 0; j < adj[prev].size(); j++) candidate[num++] = adj[prev][j];
    memset(counts, 0, sizeof(counts));
    for (int j = 0; j < num; j++)
      for (int k = 0; k < adj[candidate[j]].size(); k++)
        for (int l = 0; l < num; l++)
          if (adj[candidate[j]][k] == candidate[l]) counts[l]++;
    for (int j = 0; j < num; j++)
      if (!done[candidate[j]] && counts[j] >= 2) {
        prev = candidate[j];
        done[prev] = true;
        result[i] = prev;
        break;
      }
  }
  for (int i = 1; i <= N; i++)
    if (!done[i]) {
      printf("-1\n");
      return 0;
    }
  bool found = true;
  for (int i = 0; i < N; i++)
    if (!(contains(result[i], result[(i + 1) % N]) &&
          contains(result[i], result[(i + 2) % N])))
      found = false;
  if (!found) {
    printf("-1\n");
    return 0;
  }
  for (int i = 0; i < N; i++) printf("%d ", result[i]);
  printf("\n");
  return 0;
}
