#include <bits/stdc++.h>
using namespace std;
const int N = 1024;
vector<pair<int, int> > moves[N][N];
int dw[N][N];
int db[N][N];
pair<int, int> w, b, wg, bg;
int n, m;
bool legal(pair<int, int> p) {
  return 0 < p.first && p.first <= n && 0 < p.second && p.second <= m;
}
void get_moves() {
  for (int x = 1; x <= n; x++)
    for (int y = 1; y <= m; y++)
      for (auto nxt : {
               pair<int, int>{x + 1, y + 2},
               {x - 1, y + 2},
               {x - 1, y - 2},
               {x + 1, y - 2},
               {x + 2, y + 1},
               {x - 2, y + 1},
               {x - 2, y - 1},
               {x + 2, y - 1},
           })
        if (legal(nxt)) moves[x][y].push_back(nxt);
}
void explore(int grid[N][N], pair<int, int> start) {
  deque<pair<int, int> > q;
  grid[start.first][start.second] = 1;
  q.push_back(start);
  while (q.size()) {
    pair<int, int> cur = q.front();
    q.pop_front();
    int d = grid[cur.first][cur.second] + 1;
    for (pair<int, int> nxt : moves[cur.first][cur.second])
      if (!grid[nxt.first][nxt.second]) {
        grid[nxt.first][nxt.second] = d;
        q.push_back(nxt);
      }
  }
}
vector<pair<int, int> > backtrace(int grid[N][N], pair<int, int> obj) {
  int d = grid[obj.first][obj.second];
  vector<pair<int, int> > bt(--d);
  while (d)
    for (auto p : moves[obj.first][obj.second]) {
      if (grid[p.first][p.second] == d) {
        bt[--d] = obj;
        obj = p;
        break;
      }
    }
  return bt;
}
void wrun(pair<int, int> g) {
  cout << "WHITE" << endl;
  auto hist = backtrace(dw, g);
  int rem = hist.size();
  for (pair<int, int> p : hist) {
    w = p;
    cout << w.first << ' ' << w.second << endl;
    if (w == b) exit(0);
    if (--rem) cin >> b.first >> b.second;
  }
}
void brun(pair<int, int> g) {
  cout << "BLACK" << endl;
  auto hist = backtrace(db, g);
  for (pair<int, int> p : hist) {
    cin >> w.first >> w.second;
    b = p;
    cout << b.first << ' ' << b.second << endl;
    if (b == w) exit(0);
  }
}
int main() {
  cin >> n >> m >> w.first >> w.second >> b.first >> b.second;
  get_moves();
  explore(dw, w);
  explore(db, b);
  wg = {n / 2, m / 2};
  bg = {n / 2 + 1, m / 2};
  int dww = dw[wg.first][wg.second];
  int dwb = dw[bg.first][bg.second];
  int dbw = db[wg.first][wg.second];
  int dbb = db[bg.first][bg.second];
  if (dww < dbw && dww <= dbb)
    wrun(wg);
  else if (dbb < dwb - 1 && dbb < dww)
    brun(bg);
  else if ((w.first + w.second + b.first + b.second) & 1) {
    if (dww <= dbb)
      wrun(wg);
    else {
      if (w == bg)
        cout << "WHITE" << endl;
      else {
        wrun(bg);
        cin >> b.first >> b.second;
      }
      for (pair<int, int> nxt : moves[w.first][w.second])
        if (nxt == b) {
          cout << nxt.first << ' ' << nxt.second << endl;
          return 0;
        }
      w = {n / 2 + 0, m / 2 + 2};
      cout << w.first << ' ' << w.second << endl;
      cin >> b.first >> b.second;
      w = {n / 2 + 2, m / 2 + 1};
      cout << w.first << ' ' << w.second << endl;
      if (w == b) exit(0);
      cin >> b.first >> b.second;
      w = {n / 2 + 0, m / 2 + 0};
      cout << w.first << ' ' << w.second << endl;
    }
  } else {
    if (dbb < dww)
      brun(bg);
    else {
      brun(wg);
      cin >> w.first >> w.second;
      for (pair<int, int> nxt : moves[b.first][b.second])
        if (nxt == w) {
          cout << nxt.first << ' ' << nxt.second << endl;
          return 0;
        }
      b = {n / 2 + 2, m / 2 + 1};
      cout << b.first << ' ' << b.second << endl;
      cin >> w.first >> w.second;
      b = {n / 2 + 0, m / 2 + 2};
      cout << b.first << ' ' << b.second << endl;
      if (b == w) exit(0);
      cin >> w.first >> w.second;
      b = {n / 2 + 1, m / 2 + 0};
      cout << b.first << ' ' << b.second << endl;
    }
  }
}
