#include <bits/stdc++.h>
#include<iostream>
#include<vector>
#include<map>
#include<math.h>

#define irep(i,n) for(int i = 0; i < (int)(n); i++)
#define irep2(i,a,n) for(int i = (int)(a); i <= (int)(n); i++)
#define irrep(i,n) for(int i = (int)(n-1); i > -1; i--)
#define irrep2(i,n,a) for(int i = (int)(n); i >= (int)(a); i--)

#define fi first
#define se second

using namespace std;

using ll = long long;
using v_int = vector<int>;
using v2_int = vector<v_int>;
using v_ll = vector<ll>;
using v2_ll = vector<v_ll>;
using v_string = vector<string>;
using v_bool = vector<bool>;
using v2_bool = vector<v_bool>;
using pii = pair<int, int>;
using mii = map<int, int>;

const double PI = 3.1415926535897932;
const int INF = (int)2e9;
const ll LINF = (ll)2e18;
const ll MOD = 1000000007;
const int dc[8] = {1, -1, 0,  0, 1, -1,  1, -1};
const int dr[8] = {0,  0, 1, -1, 1,  1, -1, -1};

template<typename T, typename U> inline
ostream& operator<<(ostream &o, pair<T,U> &p) {
    return o << "{" << p.first << "," << p.second << "}";
}
template<typename T> inline
istream& operator>>(istream &is, vector<T> &vec) {
    for(auto &v : vec) { is >> v; }
    return is;
}
template<typename T> inline
ostream& operator<<(ostream &os, vector<T> &vec) {
    for(auto &v : vec) { os << v << ",";}
    return os;
}
template<typename T> inline
ostream& operator<<(ostream &os, vector<vector<T> > &mat) {
    for(auto &row : mat) { os << row << endl; }
    return os;
}

template<typename T> inline
void chmin(T &a, T b) { a = min(a, b); }
template<typename T> inline
void chmax(T &a, T b) { a = max(a, b); }

int main(void)
{
    int n;
    cin >> n;
    v_int a(n+1), b(n+1);
    
    irep2(i,1,n) {
        cin >> a[i];
    }

    for(int i = n; i >= 1; i--) {
        int cnt = 0;
        for(int j = i; j <= n; j += i) {
            if(b[j]) { cnt++; }    
        }
        if(cnt % 2 != a[i]) {
            b[i] = 1;
        }
    }
    int m = 0;
    irep2(i,1,n) {
        if(b[i]) { m++; }
    }

    cout << m << endl;
    irep2(i,1,n) {
        if(b[i]) { cout << i << " "; }
    }

    return 0;
} /*atcoder*/

#include<cstdio>
const int N=1e5+5;
int n,i,a[N],ans;
int read(){
	char c=getchar();int k=0;for (;c<48||c>57;c=getchar());
	for (;c>47&&c<58;c=getchar()) k=(k<<3)+(k<<1)+c-48;return k;
}
int gcd(int a,int b){return b?gcd(b,a%b):a;}
int main(){
	for (n=read(),i=1;i<=n;i++) a[i]=read();
	if (n==1){puts("Second");return 0;}
	for (;;){
		int k0=0,k1=0,x;
		for (i=1;i<=n;i++)
			if (a[i]&1) k1++,x=i; else k0++;
		if (k0&1){ans^=1;break;}
		if (k1>1||a[x]==1) break;
		a[x]--;int k=a[1];ans^=1;
		for (i=2;i<=n&&k>2;i++) k=gcd(k,a[i]);
		for (i=1;i<=n;i++) a[i]/=k;
	}
	puts(ans?"First":"Second");
}