#include <bits/stdc++.h>
using namespace std;
const int maxn = 500005;
int n;
int p[2 * maxn + 1];
pair<int, int> pairs[maxn + 1];
int match[2 * maxn + 1];
map<int, set<int> > ComplsNotInSet;
set<int> UnvisitedPairs;
set<int> unmatched;
int numChosen[maxn + 1];
void RemoveCompl(int a, int b) {
  if ((ComplsNotInSet.find(a) != ComplsNotInSet.end()) &&
      (ComplsNotInSet[a].find(b) != ComplsNotInSet[a].end())) {
    ComplsNotInSet[a].erase(b);
    if (ComplsNotInSet[a].empty()) ComplsNotInSet.erase(a);
  }
  if ((ComplsNotInSet.find(b) != ComplsNotInSet.end()) &&
      (ComplsNotInSet[b].find(a) != ComplsNotInSet[b].end())) {
    ComplsNotInSet[b].erase(a);
    if (ComplsNotInSet[b].empty()) ComplsNotInSet.erase(b);
  }
}
void matchnos(int a, int b) {
  assert((match[a] == -1) && (match[b] == -1));
  match[a] = b;
  match[b] = a;
  assert((unmatched.find(a) != unmatched.end()) &&
         (unmatched.find(b) != unmatched.end()));
  unmatched.erase(a);
  unmatched.erase(b);
}
void unmatchnos(int a, int b) {
  assert((match[a] == b) && (match[b] == a));
  match[a] = -1;
  match[b] = -1;
  assert((unmatched.find(a) == unmatched.end()) &&
         (unmatched.find(b) == unmatched.end()));
  unmatched.insert(a);
  unmatched.insert(b);
}
set<int> GetCompls(int x) {
  if (x > n)
    return {2 * n - x, 3 * n - x};
  else
    return {n - x, 2 * n - x};
}
void AddPair(int x) {
  UnvisitedPairs.erase(x);
  for (int i = 0; i < 2; i++) {
    int y = (i == 0) ? pairs[x].first : pairs[x].second;
    if (y % n == 0) continue;
    unmatched.insert(y);
    set<int> compls = GetCompls(y);
    ComplsNotInSet[y] = compls;
    for (int comp : compls)
      if (ComplsNotInSet.find(comp) != ComplsNotInSet.end()) {
        RemoveCompl(y, comp);
        if ((match[comp] == -1) && (match[y] == -1) && (p[comp] != p[y]))
          matchnos(y, comp);
      }
  }
}
void findMatching(int start) {
  int node = start;
  int x = (pairs[node].first % n) ? pairs[node].first : pairs[node].second;
  while ((x % n) && (numChosen[node] == -1)) {
    numChosen[node] = x;
    int y = match[x];
    node = p[y];
    numChosen[node] = y;
    int z = (pairs[node].first == y) ? pairs[node].second : pairs[node].first;
    node = p[match[z]];
    x = (pairs[node].first == match[z]) ? pairs[node].second
                                        : pairs[node].first;
  }
  if (x % n == 0) numChosen[node] = x;
}
int main() {
  scanf("%d", &n);
  if (n % 2 == 0) {
    cout << "First" << endl;
    for (int k = 0; k < 2; k++)
      for (int i = 0; i < n; i++) cout << i + 1 << " ";
    cout << endl;
  } else {
    cout << "Second" << endl;
    for (int i = 1; i <= 2 * n; i++) {
      scanf("%d", &p[i]);
      p[i]--;
    }
    for (int i = 0; i <= 2 * n; i++) match[i] = -1;
    for (int i = 0; i < n; i++) {
      pairs[i] = make_pair(-1, -1);
      UnvisitedPairs.insert(i);
    }
    for (int i = 1; i <= 2 * n; i++)
      if (pairs[p[i]].first == -1)
        pairs[p[i]].first = i;
      else
        pairs[p[i]].second = i;
    while (UnvisitedPairs.size()) {
      int start = *UnvisitedPairs.begin();
      AddPair(start);
      while (ComplsNotInSet.size()) {
        if (unmatched.size()) {
          int um = *unmatched.begin();
          int cum = *ComplsNotInSet[um].begin();
          AddPair(p[cum]);
        } else {
          int cmissing = ComplsNotInSet.begin()->first;
          unmatchnos(cmissing, match[cmissing]);
        }
      }
    }
    for (int i = 0; i < n; i++) numChosen[i] = -1;
    findMatching(p[n]);
    for (int i = 0; i < n; i++)
      if (numChosen[i] == -1) findMatching(i);
    int sum = 0;
    for (int i = 0; i < n; i++) sum = (sum + numChosen[i]) % (2 * n);
    if (sum != 0)
      for (int i = 0; i < n; i++)
        numChosen[i] =
            (numChosen[i] == pairs[i].first) ? pairs[i].second : pairs[i].first;
    for (int i = 0; i < n; i++) cout << numChosen[i] << ' ';
    cout << endl;
  }
}
