func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 1000010;   int n, ans[N], cnt = 1;   vector<int> id[N], cur[N];   vector<int> g[N];   bool vis[N], done[N];   int sz[N], ns[N], ns2[N], comp_cnt, comp[N], allns = 0;   void DFS(int node) {     sz[comp_cnt]++;     vis[node] = true;     comp[node] = comp_cnt;     for (int i = 0; i < (int)g[node].size(); i++) {       if (!vis[g[node][i]]) {         DFS(g[node][i]);       }     }   }   void take(int idx, int needed) {     if (done[idx]) return;     done[idx] = true;     int u = cur[idx][0];     int v = cur[idx][1];     if (v % n == needed) swap(cur[idx][0], cur[idx][1]);     u = cur[idx][0];     v = cur[idx][1];     ns[comp[needed]] += cur[idx][0] / n;     allns += cur[idx][0] / n;     ns2[comp[needed]] += cur[idx][1] / n;     int a = id[v % n][0];     if (a == idx) a = id[v % n][1];     take(a, v % n);   }   int main() {     scanf( %d , &n);     if (n % 2 == 0) {       puts( First );       fflush(stdout);       if ((n / 2) % 2 == 0) {         ans[1] = ans[2] = cnt++;         ans[n + 1] = ans[n + 2] = cnt++;         for (int i = 3; i <= n; i++) {           ans[i] = ans[i + n] = cnt++;         }       } else {         int last[2] = {-1, -1};         for (int cur, i = 1; i <= 2 * n; i++) {           cur = (i & 1);           if (last[cur] == -1)             last[cur] = i;           else {             ans[i] = ans[last[cur]] = cnt++;             last[cur] = -1;           }         }       }       for (int i = 1; i <= 2 * n; i++) {         if (i > 1) putchar(   );         printf( %d , ans[i]);       }       puts(  );       fflush(stdout);       return 0;     }     puts( Second );     fflush(stdout);     for (int i = 1; i <= 2 * n; i++) {       scanf( %d , &ans[i]);       cur[ans[i]].push_back(i);       id[i % n].push_back(ans[i]);     }     for (int u, v, i = 1; i <= n; i++) {       u = cur[i][0] % n;       v = cur[i][1] % n;       g[u].push_back(v);       g[v].push_back(u);     }     for (int i = 0; i < n; i++) {       if (vis[i]) continue;       DFS(i);       comp_cnt++;     }     for (int i = 1; i <= n; i++) {       if (done[i]) continue;       take(i, cur[i][0] % n);     }     long long val = (long long)n * (n - 1) / 2;     val += (long long)allns * n;     val %= (2 * n);     if (val != 0) {       assert(val == n);       int good = -1;       for (int i = 0; i < comp_cnt; i++) {         if (abs(ns[i] - ns2[i]) % 2 == 1) {           good = i;           break;         }       }       assert(good != -1);       for (int i = 1; i <= n; i++) {         if (comp[cur[i][0] % n] == good) {           swap(cur[i][0], cur[i][1]);         }       }     }     for (int i = 1; i <= n; i++) {       if (i > 1) putchar(   );       printf( %d , cur[i][0]);     }     puts(  );     fflush(stdout);     return 0;   }   