#include <bits/stdc++.h>
#pragma GCC target("avx")
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
using namespace std;
using ll = long long;
using datas = pair<ll, ll>;
using ddatas = pair<long double, long double>;
using tdata = pair<ll, datas>;
using vec = vector<ll>;
using mat = vector<vec>;
using pvec = vector<datas>;
using pmat = vector<pvec>;
const ll mod = 1000000007;
const ll inf = 1LL << 60;
const long double PI = acos(-1);
const long double eps = 1e-9;
template <class T>
inline bool chmax(T& a, T b) {
  bool x = a < b;
  if (x) a = b;
  return x;
}
template <class T>
inline bool chmin(T& a, T b) {
  bool x = a > b;
  if (x) a = b;
  return x;
}
struct unionfind {
 private:
  int maxN;
  vector<int> par, treesize;

 public:
  unionfind(int N) : maxN(N), par(N), treesize(N, 1) {
    for (int i = 0; i < maxN; ++i) par[i] = i;
  }
  int root(int x) {
    while (par[x] != x) {
      x = par[x] = par[par[x]];
    }
    return x;
  }
  bool unite(int x, int y) {
    x = root(x);
    y = root(y);
    if (x == y) return false;
    if (treesize[x] > treesize[y]) swap(x, y);
    par[x] = y;
    treesize[y] += treesize[x];
    return true;
  }
  bool parcheck(int x, int y) { return root(x) == root(y); }
  int size(int x) { return treesize[root(x)]; }
  void clear() {
    treesize.assign(maxN, 1);
    for (int i = 0; i < maxN; ++i) par[i] = i;
  }
};
int main() {
  int i, x, N;
  cin >> N;
  if (~N & 1) {
    cout << "First"
         << "\n";
    for (i = 0; i < (ll)N * 2; ++i) cout << i % N + 1 << " \n"[i + 1 == N * 2];
    return 0;
  }
  cout << "Second"
       << "\n";
  vector<int> bf(N, -1);
  unionfind g(N * 2);
  for (i = 0; i < (ll)N * 2; ++i) {
    cin >> x;
    if (~bf[--x]) {
      g.unite((bf[x] + N) % (N * 2), i);
      g.unite((i + N) % (N * 2), bf[x]);
    }
    bf[x] = i;
  }
  ll sum = 0;
  for (i = 0; i < (ll)N; ++i) {
    if (!g.parcheck(0, i) && !g.parcheck(0, i + N)) g.unite(0, i);
    sum += i + 1 + g.parcheck(0, i + N) * N;
  }
  for (i = 0; i < (ll)N * 2; ++i)
    if ((sum & 1) ^ g.parcheck(0, i)) cout << i + 1 << " ";
  cout << "\n";
}
