func_code_string: #include <bits/stdc++.h>   using namespace std;   const long long FASTIO = []() {     ios::sync_with_stdio(0);     cin.tie(0);     cout.tie(0);     return 0;   }();   long long n;   vector<vector<long long>> ans;   long long ask(long long x1, long long y1, long long x2, long long y2) {     cout <<  ?   << x1 <<     << y1 <<     << x2 <<     << y2 <<   n ;     cout.flush();     long long c;     cin >> c;     if (c == -1) {       while (1) {       }     }     return c;   }   void bfs(long long x, long long y) {     vector<vector<long long>> used(n + 5, vector<long long>(n + 5, true));     vector<long long> v1 = {2, 1, 0, 0, -1, -2};     vector<long long> v2 = {0, 1, 2, -2, -1, 0};     for (long long i = 1; i <= n; i++) {       for (long long j = 1; j <= n; j++) {         used[i][j] = false;       }     }     queue<pair<long long, long long>> q;     q.push({x, y});     used[x][y] = true;     while (!q.empty()) {       long long X = q.front().first;       long long Y = q.front().second;       q.pop();       for (long long i = 0; i < 6; i++) {         if (X + v1[i] > 0 && Y + v2[i] > 0 && !used[X + v1[i]][Y + v2[i]]) {           pair<long long, long long> a = {X, Y}, b = {X + v1[i], Y + v2[i]};           if (v1[i] < 0 || v2[i] < 0) {             swap(a, b);           }           if (b != pair<long long, long long>{n, n}) {             bool t = ask(a.first, a.second, b.first, b.second);             if (t) {               ans[X + v1[i]][Y + v2[i]] = ans[X][Y];             } else {               ans[X + v1[i]][Y + v2[i]] = !ans[X][Y];             }           }           used[X + v1[i]][Y + v2[i]] = true;           q.push({X + v1[i], Y + v2[i]});         }       }     }   }   signed main() {     cin >> n;     ans.resize(n + 10, vector<long long>(n + 10, -1));     ans[1][1] = 1;     ans[n][n] = 0;     bfs(1, 1);     long long p = 1;     while (ans[p][p] == ans[p + 2][p + 2]) {       ++p;     }     if (ask(p, p, p + 2, p + 1)) {       ans[p + 2][p + 1] = ans[p][p];       bfs(p + 2, p + 1);     } else if (ask(p + 1, p, p + 2, p + 2)) {       ans[p + 1][p] = ans[p + 2][p + 2];       bfs(p + 1, p);     } else {       if (ans[p + 2][p] == 1) {         ans[p + 2][p + 1] = 0;         bfs(p + 2, p + 1);       } else {         ans[p + 1][p] = 1;         bfs(p + 1, p);       }     }     cout <<  ! n ;     for (long long i = 1; i <= n; i++) {       for (long long j = 1; j <= n; j++) {         cout << ans[i][j];       }       cout <<   n ;     }   }   