func_code_string: #include <bits/stdc++.h>   using namespace std;   int main() {     int n, m, k;     int x1, x2, y1, y2;     cin >> n >> m >> k;     map<int, vector<pair<int, int> > > cols;     map<int, vector<pair<int, int> > > rows;     map<int, int> sc;     map<int, int> sr;     for (int i = 0; i < k; i++) {       cin >> x1 >> y1 >> x2 >> y2;       if (x1 == x2)         cols[x1].push_back(make_pair(min(y1, y2), max(y1, y2)));       else         rows[y1].push_back(make_pair(min(x1, x2), max(x1, x2)));     }     vector<pair<int, int> > sizes;     map<int, vector<pair<int, int> > >::iterator it;     vector<pair<int, int> > cuts;     int ans = 0;     for (it = cols.begin(); it != cols.end(); it++) {       cuts = (*it).second;       int sum = 0, last = 0;       sort(cuts.begin(), cuts.end());       for (int i = 0; i < cuts.size(); i++) {         if (cuts[i].first >= last) {           sum += cuts[i].second - cuts[i].first;           last = cuts[i].second;         }         if (cuts[i].second > last) {           sum += cuts[i].second - last;           last = cuts[i].second;         }       }       ans ^= (m - sum);       sc[(*it).first] = m - sum;     }     for (it = rows.begin(); it != rows.end(); it++) {       cuts = (*it).second;       int sum = 0, last = 0;       sort(cuts.begin(), cuts.end());       for (int i = 0; i < cuts.size(); i++) {         if (cuts[i].first >= last) {           sum += cuts[i].second - cuts[i].first;           last = cuts[i].second;         }         if (cuts[i].second > last) {           sum += cuts[i].second - last;           last = cuts[i].second;         }       }       ans ^= (n - sum);       sr[(*it).first] = n - sum;     }     if ((n - 1 - cols.size()) % 2) ans ^= m;     if ((m - 1 - rows.size()) % 2) ans ^= n;     if (ans == 0)       cout <<  SECOND  << endl;     else {       cout <<  FIRST  << endl;       if (cols.size() < n - 1 && (ans ^ m) < m) {         int col = 1;         while (cols.find(col) != cols.end()) col++;         cout << col <<   0   << col <<     << m - (ans ^ m) << endl;         return 0;       }       if (rows.size() < m - 1 && (ans ^ n) < n) {         int row = 1;         while (rows.find(row) != rows.end()) row++;         cout <<  0   << row <<     << n - (ans ^ n) <<     << row << endl;         return 0;       }       for (it = cols.begin(); it != cols.end(); it++) {         int x = (*it).first;         if ((sc[x] ^ ans) >= sc[x]) continue;         int need = (sc[x] ^ ans), last = 0, sum = 0;         cuts = (*it).second;         sort(cuts.begin(), cuts.end());         for (int i = 0; i < cuts.size() && need; i++) {           if (cuts[i].first >= last) {             sum += cuts[i].first - last;             if (sum <= need)               last = cuts[i].second;             else               last = cuts[i].first - (sum - need);             continue;           }           if (cuts[i].second > last) {             last = cuts[i].second;           }         }         if (sum < need) last += (need - sum);         cout << x <<     << last <<     << x <<     << m << endl;         return 0;       }       for (it = rows.begin(); it != rows.end(); it++) {         int x = (*it).first;         if ((sr[x] ^ ans) >= sr[x]) continue;         int need = (sr[x] ^ ans), last = 0, sum = 0;         cuts = (*it).second;         sort(cuts.begin(), cuts.end());         for (int i = 0; i < cuts.size() && need; i++) {           if (cuts[i].first >= last) {             sum += cuts[i].first - last;             if (sum <= need)               last = cuts[i].second;             else               last = cuts[i].first - (sum - need);             continue;           }           if (cuts[i].second > last) {             last = cuts[i].second;           }         }         if (sum < need) last += (need - sum);         cout << last <<     << x <<     << n <<     << x << endl;       }     }   }   