#include <bits/stdc++.h>
using namespace std;
int main() {
  int n;
  scanf("%d", &n);
  if (n % 2 == 0) {
    printf("First\n");
    fflush(stdout);
    for (int j = 0; j < (2); j++)
      for (int i = 0; i < (n); i++) printf("%d ", i + 1);
    printf("\n");
    fflush(stdout);
  } else {
    printf("Second\n");
    fflush(stdout);
    vector<int> poz(2 * n);
    vector<pair<int, int> > parovi(n, make_pair(-1, -1));
    vector<bool> uzeo(n, 0);
    int a;
    for (int i = 0; i < (2 * n); i++) {
      scanf("%d", &a);
      a--;
      if (parovi[a].first == -1)
        parovi[a].first = i;
      else
        parovi[a].second = i;
      poz[i] = a;
    }
    vector<int> svi;
    long long int suma = 0;
    for (int i = 2 * n - 1; i >= n; i--) {
      if (uzeo[i % n]) continue;
      uzeo[i % n] = 1;
      svi.push_back(i + 1);
      suma += i + 1;
      int tr_par = poz[i], novi;
      while (1) {
        if (uzeo[parovi[tr_par].first % n]) {
          if (uzeo[parovi[tr_par].second % n]) break;
          novi = parovi[tr_par].second;
          if (novi >= n)
            novi -= n;
          else
            novi += n;
          svi.push_back(novi + 1);
          suma += novi + 1;
          uzeo[novi % n] = 1;
          tr_par = poz[novi];
        } else if (uzeo[parovi[tr_par].second % n]) {
          novi = parovi[tr_par].first;
          if (novi >= n)
            novi -= n;
          else
            novi += n;
          svi.push_back(novi + 1);
          suma += novi + 1;
          uzeo[novi % n] = 1;
          tr_par = poz[novi];
        }
      }
    }
    if (suma % (2 * n) != 0)
      for (int i = 0; i < (n); i++)
        if (svi[i] > n)
          svi[i] -= n;
        else
          svi[i] += n;
    for (int i = 0; i < (n); i++) printf("%d ", svi[i]);
    printf("\n");
    fflush(stdout);
  }
  return 0;
}
