#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int f = 1, ans = 0;
  char c = getchar();
  while (c < '0' || c > '9') {
    if (c == '-') f = -1;
    c = getchar();
  }
  while (c >= '0' && c <= '9') {
    ans = ans * 10 + c - '0';
    c = getchar();
  }
  return f * ans;
}
const int MAXN = (1 << 12) + 1;
int N, p[MAXN], res, q[MAXN], v[MAXN], Ma[MAXN], A[MAXN];
void fix(int x, int y) {
  int d = q[x] ^ v[x], k = Ma[d];
  if (k == x) return;
  if (k == y) {
    swap(p[x], p[y]), swap(Ma[p[x]], Ma[p[y]]);
    return;
  }
  swap(p[k], p[x]), swap(q[k], q[y]), swap(Ma[p[x]], Ma[p[k]]);
  fix(k, y);
}
int main() {
  N = (1 << read());
  for (int i = 0; i < N; i++) A[i] = read(), res ^= A[i];
  if (res) {
    printf("Fou\n");
    return 0;
  }
  for (int i = 0; i < N; i++) p[i] = q[i] = Ma[i] = i;
  printf("Shi\n");
  for (int i = 0; i < N - 1; i++)
    if (v[i] != A[i]) {
      int d = v[i] ^ A[i];
      v[i] ^= d, v[i + 1] ^= d;
      fix(i, i + 1);
    }
  for (int i = 0; i < N; i++) printf("%d ", p[i]);
  printf("\n");
  for (int i = 0; i < N; i++) printf("%d ", q[i]);
  printf("\n");
}
