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