#include <bits/stdc++.h>   using namespace std;   template <typename T>   void maxtt(T& t1, T t2) {     t1 = max(t1, t2);   }   template <typename T>   void mintt(T& t1, T t2) {     t1 = min(t1, t2);   }   bool debug = 0;   int n, m, k;   string direc =  URDL ;   const long long MOD2 = (long long)1000000007 * (long long)1000000007;   long long ln, lk, lm;   void etp(bool f = 0) {     puts(f ?  YES  :  NO );     exit(0);   }   void addmod(int& x, int y, int mod = 1000000007) {     assert(y >= 0);     x += y;     if (x >= mod) x -= mod;     assert(x >= 0 && x < mod);   }   void et(int x = -1) {     printf( %d n , x);     exit(0);   }   long long fastPow(long long x, long long y, int mod = 1000000007) {     long long ans = 1;     while (y > 0) {       if (y & 1) ans = (x * ans) % mod;       x = x * x % mod;       y >>= 1;     }     return ans;   }   long long gcd1(long long x, long long y) { return y ? gcd1(y, x % y) : x; }   int d[2][135][135];   int xa, ya, xb, yb;   int dx[8] = {1, 2, 2, 1, -1, -2, -2, -1}, dy[8] = {2, 1, -1, -2, -2, -1, 1, 2};   void bfs(int x, int y, int w) {     queue<pair<int, int> > q;     q.push({x, y});     d[w][x][y] = 0;     while (!q.empty()) {       auto t = q.front();       q.pop();       for (int(k) = 0; (k) < (int)(8); (k)++) {         int nx = t.first + dx[k], ny = t.second + dy[k];         if (nx >= 1 && nx <= n && ny >= 1 && ny <= m &&             d[w][nx][ny] > d[w][t.first][t.second] + 1) {           d[w][nx][ny] = d[w][t.first][t.second] + 1;           q.push({nx, ny});         }       }     }   }   int ox, oy;   inline void dfs(int x, int y, int w) {     for (int(k) = 0; (k) < (int)(8); (k)++) {       int nx = x + dx[k], ny = y + dy[k];       if (nx == ox && ny == oy) {         cout << nx <<     << ny << endl;         exit(0);       }     }     for (int(k) = 0; (k) < (int)(8); (k)++) {       int nx = x + dx[k], ny = y + dy[k];       if (d[w][nx][ny] < d[w][x][y]) {         cout << nx <<     << ny << endl;         cin >> ox >> oy;         dfs(nx, ny, w);         return;       }     }   }   void fmain(int tid) {     cin >> n >> m >> xa >> ya >> xb >> yb;     for (int(i) = 0; (i) < (int)(2); (i)++)       for (int(j) = 0; (j) < (int)(135); (j)++)         for (int(k) = 0; (k) < (int)(135); (k)++) d[i][j][k] = (1000000000);     bfs(n / 2, m / 2, 0);     bfs(n / 2 + 1, m / 2, 1);     int u = d[0][xa][ya], v = d[0][xb][yb], p = d[1][xa][ya], q = d[1][xb][yb];     if ((xa + ya + xb + yb) % 2 == 0) {       if (q < u) {         cout <<  BLACK  << endl;         cin >> ox >> oy;         dfs(xb, yb, 1);       } else if (v < u + 1) {         cout <<  BLACK  << endl;         cin >> ox >> oy;         dfs(xb, yb, 0);         dfs(n / 2, m / 2, 1);       } else {         cout <<  WHITE  << endl;         ox = xb;         oy = yb;         dfs(xa, ya, 0);       }     } else {       if (u <= q) {         cout <<  WHITE  << endl;         ox = xb;         oy = yb;         dfs(xa, ya, 0);       } else if (p <= q + 1) {         cout <<  WHITE  << endl;         ox = xb;         oy = yb;         dfs(xa, ya, 1);         dfs(n / 2 + 1, m / 2, 0);       } else {         cout <<  BLACK  << endl;         cin >> ox >> oy;         dfs(xb, yb, 1);       }     }   }   int main() {     int t = 1;     for (int(i) = 1; (i) <= (int)(t); (i)++) {       fmain(i);     }     return 0;   }