func_code_string: #include <bits/stdc++.h>   using namespace std;   template <typename T>   ostream& operator<<(ostream& os, const vector<T>& v) {     for (auto i : v) os << i <<    ;     return os;   }   template <typename T>   ostream& operator<<(ostream& os, const set<T>& v) {     for (auto i : v) os << i <<    ;     return os;   }   const int N = 41;   const int dx[] = {1, 1, 2, 2, -1, -1, -2, -2};   const int dy[] = {2, -2, 1, -1, 2, -2, 1, -1};   using pii = pair<int, int>;   int db[N][N];   int dw[N][N];   int ex[N][N];   bool vis[N][N];   int n, m;   void init() {     pii S = {n / 2, m / 2};     queue<pii> q;     q.push(S);     memset(dw, 0x3f, sizeof(dw));     dw[n / 2][m / 2] = 0;     while (!q.empty()) {       pii u = q.front();       q.pop();       if (vis[u.first][u.second]) continue;       vis[u.first][u.second] = true;       for (int i = 0; i < 8; ++i) {         pii v;         v.first = u.first + dx[i];         v.second = u.second + dy[i];         if (v.first > 0 && v.first <= n && v.second > 0 && v.second <= m) {           q.push(v);           dw[v.first][v.second] =               min(dw[u.first][u.second] + 1, dw[v.first][v.second]);         }       }     }     S = {n / 2 + 1, m / 2};     memset(db, 0x3f, sizeof(db));     memset(vis, 0, sizeof(vis));     db[n / 2 + 1][m / 2] = 0;     q.push(S);     while (!q.empty()) {       pii u = q.front();       q.pop();       if (vis[u.first][u.second]) continue;       vis[u.first][u.second] = true;       for (int i = 0; i < 8; ++i) {         pii v;         v.first = u.first + dx[i];         v.second = u.second + dy[i];         if (v.first > 0 && v.first <= n && v.second > 0 && v.second <= m) {           q.push(v);           db[v.first][v.second] =               min(db[u.first][u.second] + 1, db[v.first][v.second]);         }       }     }     S = {n / 2, m / 2};     memset(ex, 0x3f, sizeof(ex));     for (int i = 0; i < 8; ++i) {       pii v;       v = {S.first + dx[i], S.second + dy[i]};       q.push(v);       ex[v.first][v.second] = 0;     }     memset(vis, 0, sizeof(vis));     while (!q.empty()) {       pii u = q.front();       q.pop();       if (vis[u.first][u.second]) continue;       vis[u.first][u.second] = true;       for (int i = 0; i < 8; ++i) {         pii v;         v.first = u.first + dx[i];         v.second = u.second + dy[i];         if (v.first > 0 && v.first <= n && v.second > 0 && v.second <= m) {           q.push(v);           ex[v.first][v.second] =               min(ex[u.first][u.second] + 1, ex[v.first][v.second]);         }       }     }     ex[S.first][S.second] = -1;   }   bool inside(pii x) {     return x.first >= 1 && x.second >= 1 && x.first <= n && x.second <= m;   }   int main() {     scanf( %d%d , &n, &m);     init();     pii w, b;     scanf( %d%d%d%d , &w.first, &w.second, &b.first, &b.second);     pii TW = {n / 2, m / 2};     pii TB = {n / 2 + 1, m / 2};     bool atk, reach;     atk = true;     reach = false;     for (int i = 0; i < 8; ++i) {       pii v;       v = {w.first + dx[i], w.second + dy[i]};       if (!inside(v)) continue;       bool flag = false;       for (int j = 0; j < 8; ++j) {         pii w;         w = {b.first + dx[j], b.second + dy[j]};         if (w == v) flag = true;       }       if (!flag) atk = false;       if (v == TW) {         if (flag) atk = true;         reach = true;         break;       }     }     if (reach && !atk) {       printf( WHITE n );       printf( %d %d n , TW.first, TW.second);       fflush(stdout);       return 0;     }     int BB = db[b.first][b.second];     int WW = dw[w.first][w.second];     int BW = dw[b.first][b.second];     int WB = db[w.first][w.second];     if (WW + 1 <= BW && WW <= BB) {       printf( WHITE n );       fflush(stdout);       while (w != TW) {         for (int i = 0; i < 8; ++i) {           pii tmp;           tmp = {w.first + dx[i], w.second + dy[i]};           if (!inside(tmp)) continue;           if (dw[tmp.first][tmp.second] < dw[w.first][w.second]) {             w = tmp;             printf( %d %d n , w.first, w.second);             fflush(stdout);             if (w == b) return 0;             if (w != TW) scanf( %d%d , &b.first, &b.second);             break;           }         }       }       return 0;     }     if (BB + 2 <= WB && BB + 1 <= WW) {       printf( BLACK n );       fflush(stdout);       while (b != TB) {         for (int i = 0; i < 8; ++i) {           pii tmp;           tmp = {b.first + dx[i], b.second + dy[i]};           if (!inside(tmp)) continue;           if (db[tmp.first][tmp.second] < db[b.first][b.second]) {             b = tmp;             printf( %d %d n , tmp.first, tmp.second);             fflush(stdout);             if (b == w) return 0;             if (b != TB) scanf( %d%d , &w.first, &w.second);             break;           }         }       }       return 0;     }     if (((w.first + w.second) & 1) ^ ((b.first + b.second) & 1)) {       printf( WHITE n );       fflush(stdout);       if (WW <= BB) {         while (w != TW) {           for (int i = 0; i < 8; ++i) {             pii tmp;             tmp = {w.first + dx[i], w.second + dy[i]};             if (!inside(tmp)) continue;             if (dw[tmp.first][tmp.second] < dw[w.first][w.second]) {               printf( %d %d n , tmp.first, tmp.second);               fflush(stdout);               w = tmp;               if (w == b) return 0;               scanf( %d%d , &b.first, &b.second);               break;             }           }         }       } else {         while (w != TB) {           for (int i = 0; i < 8; ++i) {             pii tmp;             tmp = {w.first + dx[i], w.second + dy[i]};             if (!inside(tmp)) continue;             if (db[tmp.first][tmp.second] < db[w.first][w.second]) {               printf( %d %d n , tmp.first, tmp.second);               fflush(stdout);               w = tmp;               if (w == b) return 0;               scanf( %d%d , &b.first, &b.second);               break;             }           }         }         for (int i = 0; i < 8; ++i) {           pii tmp;           tmp = {w.first + dx[i], w.second + dy[i]};           if (!inside(tmp)) continue;           if (tmp == b) return 0 * printf( %d %d n , tmp.first, tmp.second);         }         while (w != TW) {           for (int i = 0; i < 8; ++i) {             pii tmp;             tmp = {w.first + dx[i], w.second + dy[i]};             if (!inside(tmp)) continue;             if (dw[tmp.first][tmp.second] < dw[w.first][w.second]) {               printf( %d %d n , tmp.first, tmp.second);               fflush(stdout);               w = tmp;               if (w == b) return 0;               scanf( %d%d , &b.first, &b.second);               break;             }           }         }       }       return 0;     } else {       printf( BLACK n );       fflush(stdout);       scanf( %d%d , &w.first, &w.second);       if (WW >= BB) {         while (b != TB) {           for (int i = 0; i < 8; ++i) {             pii tmp;             tmp = {b.first + dx[i], b.second + dy[i]};             if (!inside(tmp)) continue;             if (db[tmp.first][tmp.second] < db[b.first][b.second]) {               b = tmp;               printf( %d %d n , tmp.first, tmp.second);               fflush(stdout);               if (w == b) return 0;               scanf( %d%d , &w.first, &w.second);               break;             }           }         }       } else {         while (b != TW) {           for (int i = 0; i < 8; ++i) {             pii tmp;             tmp = {b.first + dx[i], b.second + dy[i]};             if (!inside(tmp)) continue;             if (dw[tmp.first][tmp.second] < dw[b.first][b.second]) {               b = tmp;               printf( %d %d n , tmp.first, tmp.second);               fflush(stdout);               if (w == b) return 0;               scanf( %d%d , &w.first, &w.second);               break;             }           }         }         for (int i = 0; i < 8; ++i) {           pii tmp;           tmp = {b.first + dx[i], b.second + dy[i]};           if (!inside(tmp)) continue;           if (tmp == w) return 0 * printf( %d %d n , tmp.first, tmp.second);         }         while (b != TB) {           for (int i = 0; i < 8; ++i) {             pii tmp;             tmp = {b.first + dx[i], b.second + dy[i]};             if (!inside(tmp)) continue;             if (db[tmp.first][tmp.second] < db[b.first][b.second]) {               b = tmp;               printf( %d %d n , tmp.first, tmp.second);               fflush(stdout);               if (w == b) return 0;               scanf( %d%d , &w.first, &w.second);               break;             }           }         }       }     }     return 0;   }   