#include <bits/stdc++.h>
using namespace std;
char connected[100005];
int countOccurance[100005];
int edges[4 * 100005][2];
int rightSibling[4 * 100005], leftChild[2 * 100005], dist[100005],
    parent[100005];
void addEdge(int index) {
  int u = edges[index][0];
  rightSibling[index] = leftChild[u];
  leftChild[u] = index;
}
void initGraph(int node) {
  int i;
  for (i = 1; i <= node; i++) {
    parent[i] = -1, leftChild[i] = -1, connected[i] = -1;
  }
}
list<int> p;
int findNext(int a, int b, int c, int left) {
  int d, f;
  if (left == 0) return 1;
  for (int i = leftChild[c]; i != -1; i = rightSibling[i]) {
    d = edges[i][1];
    if (connected[d] != -1) continue;
    for (int j = leftChild[d]; j != -1; j = rightSibling[j]) {
      f = edges[j][1];
      if (b == f) break;
      if (connected[f] != -1) continue;
    }
    if (b == f) {
      connected[d] = d;
      if (findNext(b, c, d, left - 1)) {
        p.push_front(d);
        return 1;
      } else {
        connected[d] = -1;
      }
    }
  }
  return 0;
}
void printGraph(int n) {
  int i, j;
  for (i = 1; i <= n; i++) {
    cout << i << " : ";
    for (j = leftChild[i]; j != -1; j = rightSibling[j])
      cout << edges[j][1] << ' ';
    cout << endl;
  }
}
int main() {
  int n, b, c, d, flag = 0;
  cin >> n;
  initGraph(n);
  for (int i = 0; i < 4 * n; i += 2) {
    cin >> edges[i][0] >> edges[i][1];
    addEdge(i);
    edges[i + 1][0] = edges[i][1], edges[i + 1][1] = edges[i][0];
    addEdge(i + 1);
    countOccurance[edges[i][0]]++;
    countOccurance[edges[i][1]]++;
  }
  for (int i = 1; i <= n; i++)
    if (countOccurance[i] != 4) {
      flag = -1;
      break;
    }
  for (int i = leftChild[1]; i != -1 && !flag; i = rightSibling[i]) {
    b = edges[i][1];
    for (int j = leftChild[b]; j != -1 && !flag; j = rightSibling[j]) {
      c = edges[j][1];
      if (c == 1) continue;
      for (int k = leftChild[c]; k != -1 && !flag; k = rightSibling[k]) {
        d = edges[k][1];
        if (d == 1) {
          connected[1] = 1, connected[b] = b, connected[c] = c;
          if (findNext(1, b, c, n - 3)) {
            list<int>::iterator ptr;
            for (ptr = p.begin(); p.end() != ptr; ptr++)
              ;
            ptr--;
            for (int l = leftChild[*ptr]; l != -1; l = rightSibling[l]) {
              if (1 == edges[l][1]) {
                flag = 1;
                break;
              }
            }
            if (flag != 1) {
              connected[1] = -1, connected[b] = -1, connected[c] = -1;
              p.clear();
              continue;
            }
            flag = 1;
            for (ptr = p.begin(); p.end() != ptr; ptr++) cout << *ptr << ' ';
            cout << 1 << ' ' << b << ' ' << c << endl;
          } else {
            connected[1] = -1, connected[b] = -1, connected[c] = -1;
            p.clear();
          }
        }
      }
    }
  }
  if (flag <= 0) cout << -1 << endl;
  return 0;
}
