#include <bits/stdc++.h>
using namespace std;
int A[200005], B[200005], N;
int O[200005][5];
void ucitaj() {
  scanf("%d", &N);
  if (N == 5) {
    printf("1 5 3 4 2\n");
    exit(0);
  }
  int i, j;
  for (i = 1; i <= 2 * N; i++) {
    scanf("%d%d", A + i, B + i);
    if (O[A[i]][1] == 0)
      O[A[i]][1] = B[i];
    else if (O[A[i]][2] == 0)
      O[A[i]][2] = B[i];
    else if (O[A[i]][3] == 0)
      O[A[i]][3] = B[i];
    else
      O[A[i]][4] = B[i];
    if (O[B[i]][1] == 0)
      O[B[i]][1] = A[i];
    else if (O[B[i]][2] == 0)
      O[B[i]][2] = A[i];
    else if (O[B[i]][3] == 0)
      O[B[i]][3] = A[i];
    else
      O[B[i]][4] = A[i];
  }
}
bool Sus6[10][10];
bool susedi(int a, int b) {
  if (Sus6[a][b]) return false;
  return O[a][1] == b || O[a][2] == b || O[a][3] == b || O[a][4] == b;
}
bool susedi6(int a, int b) {
  return O[a][1] == b || O[a][2] == b || O[a][3] == b || O[a][4] == b;
}
void sus6() {
  int i, j, k;
  for (i = 1; i <= 6; i++) {
    for (j = i + 1; j <= 6; j++) {
      for (k = i + 1; k <= 6; k++) {
        if (susedi6(i, j) && susedi6(j, k) && susedi6(i, k)) {
          Sus6[i][j] = true;
          Sus6[i][k] = true;
          Sus6[k][j] = true;
          Sus6[k][i] = true;
          Sus6[j][k] = true;
          Sus6[j][i] = true;
        }
      }
    }
  }
}
void probaj(int *A) {
  int i, j;
  if (!susedi6(A[1], A[2])) return;
  if (!susedi6(A[2], A[3])) return;
  if (!susedi6(A[3], A[4])) return;
  if (!susedi6(A[4], A[5])) return;
  if (!susedi6(A[5], A[6])) return;
  if (!susedi6(A[6], A[1])) return;
  if (!susedi6(A[1], A[3])) return;
  if (!susedi6(A[2], A[4])) return;
  if (!susedi6(A[3], A[5])) return;
  if (!susedi6(A[4], A[6])) return;
  if (!susedi6(A[5], A[1])) return;
  if (!susedi6(A[6], A[2])) return;
  if (susedi6(A[1], A[4])) return;
  if (susedi6(A[2], A[5])) return;
  if (susedi6(A[3], A[6])) return;
  for (i = 1; i <= 6; i++) printf("%d\n", A[i]);
  exit(0);
}
int S1[200005], S2[200005];
void ubaci() {
  int i, j, k, l, u, v;
  if (N == 6) {
    sus6();
    for (i = 1; i <= N; i++) A[i] = i;
    for (i = 1; i <= 720; i++) {
      probaj(A);
      next_permutation(A + 1, A + 7);
    }
    printf("-1\n");
    exit(0);
  }
  for (i = 1; i <= 2 * N; i++) {
    u = A[i];
    v = B[i];
    k = 0;
    if (O[u][1] == O[v][1]) k++;
    if (O[u][2] == O[v][1]) k++;
    if (O[u][3] == O[v][1]) k++;
    if (O[u][4] == O[v][1]) k++;
    if (O[u][1] == O[v][2]) k++;
    if (O[u][2] == O[v][2]) k++;
    if (O[u][3] == O[v][2]) k++;
    if (O[u][4] == O[v][2]) k++;
    if (O[u][1] == O[v][3]) k++;
    if (O[u][2] == O[v][3]) k++;
    if (O[u][3] == O[v][3]) k++;
    if (O[u][4] == O[v][3]) k++;
    if (O[u][1] == O[v][4]) k++;
    if (O[u][2] == O[v][4]) k++;
    if (O[u][3] == O[v][4]) k++;
    if (O[u][4] == O[v][4]) k++;
    if (k == 2) {
      if (S1[u] == 0)
        S1[u] = v;
      else
        S2[u] = v;
      if (S1[v] == 0)
        S1[v] = u;
      else
        S2[v] = u;
    }
  }
}
bool V[200005];
int Red[200005], RRR;
void obidji() {
  int i, j, k;
  k = 1;
  j = 1;
  V[1] = true;
  Red[++RRR] = 1;
  while (k < N) {
    if (!V[S1[j]]) {
      j = S1[j];
      V[j] = true;
    } else if (!V[S2[j]]) {
      j = S2[j];
      V[j] = true;
    } else {
      printf("-1\n");
      exit(0);
    }
    Red[++RRR] = j;
    k++;
  }
  for (i = 1; i <= N; i++) printf("%d%c", Red[i], i == N ? '\n' : ' ');
}
int main() {
  ucitaj();
  ubaci();
  obidji();
  return 0;
}
