func_code_string: #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;   }   