#include <bits/stdc++.h>
using namespace std;
int n, x, y;
vector<vector<int> > adjList(100009, vector<int>());
bool vis[100009];
vector<int> ans;
bool check_valid_edges(vector<vector<int> > &a, int n) {
  for (size_t i = 1; i <= n; i++)
    if (a[i].size() != 4) return false;
  return true;
}
int comp(int node1, int node2) {
  int c = 0;
  for (int i = 0; i < adjList[node1].size(); i++) {
    for (int j = 0; j < adjList[node2].size(); j++) {
      if (adjList[node1][i] == adjList[node2][j]) c++;
    }
  }
  return c;
}
void dfs(int node) {
  vis[node] = true;
  bool f = true;
  for (int i = 0; i < adjList[node].size() && f; i++) {
    if (comp(node, adjList[node][i]) == 2 && !vis[adjList[node][i]])
      ans.push_back(adjList[node][i]), dfs(adjList[node][i]), f = false;
  }
}
int main() {
  cin >> n;
  for (int i = 1; i <= (2 * n); i++) {
    cin >> x >> y;
    adjList[x].push_back(y);
    adjList[y].push_back(x);
  }
  if (!check_valid_edges(adjList, n)) return cout << -1 << endl, 0;
  if (n == 5)
    return cout << "1 2 3 4 5\n" << endl, 0;
  else if (n == 6) {
    int s_node = 21;
    for (int i = 0; i < adjList[1].size(); i++) s_node -= adjList[1][i];
    s_node--;
    cout << "1 " << adjList[1][0] << " " << adjList[1][1] << " " << s_node
         << " " << adjList[1][2] << " " << adjList[1][3] << endl;
    ;
  } else {
    dfs(1);
    ans.push_back(1);
    if (ans.size() == n)
      for (int i = 0; i < ans.size(); i++) cout << ans[i] << " ";
    else
      cout << -1 << endl;
  }
  return 0;
}
