Language: C++

#include<iostream>
#include<fstream>
#include<algorithm>
#include<vector>
#include<queue>
#include<map>
#include<set>
#include<string>
#include<cmath>
#include<cstdio>
#include<cassert>
using namespace std;

#define REP(i,m,n) for(int i=(m); i<(int)(n); i++)
#define RREP(i,m,n) for(int i=(int)(n-1); i>=m; i--)
#define rep(i,n) REP(i,0,n)
#define rrep(i,n) RREP(i,0,n)
#define all(a) ((a).begin(), (a).end())
#define rall(a) ((a).rbegin(), (a).rend())
#define each(it,o) for(auto it=(o).begin(); it!=(o).end(); ++it)
#define reach(it,o) for(auto it=(o).rbegin(); it!=(o).rend(); ++it)
#define fi first
#define se second

#define arrsz(a) (sizeof(a)/sizeof(a[0]))
#define dprt(fmt, ...) if (opt_debug) { fprintf(stderr, fmt, ##__VA_ARGS__); }
#define darr(a) if (opt_debug) { copy( (a), (a) + arrsz(a), ostream_iterator<int>(cerr, " ") ); cerr << endl; }
#define darr_range(a, f, t) if (opt_debug) { copy( (a) + (f), (a) + (t), ostream_iterator<int>(cerr, " ") ); cerr << endl; }
#define dvec(v) if (opt_debug) { copy( ALL(v), ostream_iterator<int>(cerr, " ") ); cerr << endl; }
#define darr2(a) if (opt_debug) { FOR(__i, 0, (arrsz(a))){ darr( (a)[__i] ); } }
#define WAIT() if (opt_debug) { string _wait_; cerr << "(hit return to continue)" << endl; getline(cin, _wait_); }
#define dump(x) if (opt_debug) { cerr << " [L" << __LINE__ << "] " << #x << " = " << (x) << endl; }
// dump vector elements in [s, e)
#define dumpv(v, s, e) if (opt_debug) { cerr << " [L" << __LINE__ << "] " << #v << " = "; FOR(__i, s, e) { cerr << v[__i] << "\t"; } cerr << endl; }
#define dumpl(x) if (opt_debug) { cerr << " [L" << __LINE__ << "] " << #x << endl << (x) << endl; }
#define dumpf() if (opt_debug) { cerr << __PRETTY_FUNCTION__ << endl; }
#define where() if (opt_debug) { cerr << __FILE__ << ": " << __PRETTY_FUNCTION__ << " [L: " << __LINE__ << "]" << endl; }
#define dumpb(bit, digits) if (opt_debug) { cerr << " [L" << __LINE__ << "] " << #bit << " = "; for(int __i = digits - 1; __i >= 0; __i--) { cerr << static_cast<bool>(bit & (1 << __i)); if (__i % 4 == 0) { cerr << " "; } } cerr << endl; }

// operator override for debug
template<typename T1, typename T2> ostream& operator<<(ostream& s, const pair<T1, T2>& d) {return s << "(" << d.first << ", " << d.second << ")";}
template<typename T> ostream& operator<<(ostream& s, const vector<T>& d) {
    int len = d.size();
    rep (i, len) {
        s << d[i]; if (i < len - 1) s << "\t";
    }
    return s;
}
template<typename T> ostream& operator<<(ostream& s, const vector< vector<T> >& d) {
    int len = d.size();
    rep (i, len) {
        s << d[i] << endl;
    }
    return s;
}
template<typename T> ostream& operator<<(ostream& s, const set<T>& v) {
    s << "{ ";
    for(typeof(v.begin()) itr = v.begin(); itr != v.end(); ++itr){
        if (itr != v.begin()) { s << ", "; }
        s << (*itr);
    }
    s << " }";
    return s;
}
template<typename T1, typename T2> ostream& operator<<(ostream& s, const map<T1, T2>& m) {
    s << "{" << endl;
    for(typeof(m.begin()) itr = m.begin(); itr != m.end(); ++itr){
        s << "\t" << (*itr).first << " : " << (*itr).second << endl;
    }
    s << "}" << endl;
    return s;
}

using ll = long long;
using pii = pair<int, int>;
using vi = vector<int>;
using vvi = vector<vi>;
using vl = vector<ll>;
using vvl = vector<vl>;

const double PI = (1*acos(0.0)); 
const double INF = 1e9;
const double EPS = 1e-9;
const double mod = 1e9 + 7;

inline void finput(string filename) {
    freopen(filename.c_str(), "r", stdin);
}

bool opt_debug = true;

int N;
int a[100010];

bool can_win(){
    for(;;){
        darr_range(a, 0, N);
        int cnt = 0, idx = 0;
        rep(i, N) if(a[i] & 1) cnt++;
        if(cnt == 1 && a[idx] != 1){
            a[idx]--;
            rep(i, N) a[i] /= 2;
        }else{
            return ((N - cnt) & 1);
        }
    }
}

int main(){
    ios_base::sync_with_stdio(0);
    // finput("./input");

    cin >> N;
    rep(i, N) cin >> a[i];
    sort(a, a+N);

    cout << (can_win() ? "First" : "Second") << endl;

    return 0;
}


Compiler output:
a.cc: In function 'bool can_win()':
a.cc:28:74: error: 'ostream_iterator' was not declared in this scope
   28 | #define darr_range(a, f, t) if (opt_debug) { copy( (a) + (f), (a) + (t), ostream_iterator<int>(cerr, " ") ); cerr << endl; }
      |                                                                          ^~~~~~~~~~~~~~~~
a.cc:97:9: note: in expansion of macro 'darr_range'
   97 |         darr_range(a, 0, N);
      |         ^~~~~~~~~~
a.cc:12:1: note: 'std::ostream_iterator' is defined in header '<iterator>'; this is probably fixable by adding '#include <iterator>'
   11 | #include<cassert>
  +++ |+#include <iterator>
   12 | using namespace std;
a.cc:28:91: error: expected primary-expression before 'int'
   28 | #define darr_range(a, f, t) if (opt_debug) { copy( (a) + (f), (a) + (t), ostream_iterator<int>(cerr, " ") ); cerr << endl; }
      |                                                                                           ^~~
a.cc:97:9: note: in expansion of macro 'darr_range'
   97 |         darr_range(a, 0, N);
      |         ^~~~~~~~~~