#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e6 + 5;
const int MAXM = 4e6 + 5;
struct Edge {
  int to, nxt;
  Edge() = default;
  Edge(int a, int b) : to(a), nxt(b) {}
} e[MAXM];
int head[MAXN], edge_cnt = 1;
int n, vis[MAXN], dat[MAXN], lst[MAXN];
long long sum[2];
inline int read() {
  int x = 0;
  char ch = getchar();
  while (!isdigit(ch)) ch = getchar();
  while (isdigit(ch)) {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  return x;
}
inline void add(int x, int y) {
  e[++edge_cnt] = Edge{y, head[x]};
  head[x] = edge_cnt;
}
inline void add_edge(int x, int y) { add(x, y), add(y, x); }
inline void solve0() {
  cout << "First" << endl;
  for (int i = 1; i <= n * 2; i++) cout << (i - 1) % n + 1 << ' ';
  cout << endl;
}
void dfs(int x, int v) {
  vis[x] = v, sum[v - 2] += x;
  for (int i = head[x]; i; i = e[i].nxt)
    if (!vis[e[i].to]) dfs(e[i].to, v ^ 1);
}
inline void solve1() {
  cout << "Second" << endl;
  for (int i = 1; i <= n * 2; i++) dat[i] = read();
  for (int i = 1; i <= n * 2; i++)
    if (!lst[dat[i]])
      lst[dat[i]] = i;
    else
      add_edge(i, lst[dat[i]]);
  for (int i = 1; i <= n; i++) add_edge(i, i + n);
  for (int i = 1; i <= n; i++)
    if (!vis[i]) dfs(i, 2);
  int opt = sum[1] % (n << 1) == 0;
  for (int i = 1; i <= n * 2; i++)
    if (vis[i] == opt + 2) cout << i << ' ';
  cout << endl;
}
int main() {
  n = read();
  if (n & 1)
    return solve1(), 0;
  else
    return solve0(), 0;
}
