#include <bits/stdc++.h>
using namespace std;
const int dx[8] = {1, 1, -1, -1, 2, 2, -2, -2},
          dy[8] = {2, -2, 2, -2, 1, -1, 1, -1};
const int N = 1005;
int n, m, dis1[N][N], dis2[N][N];
bool chk(int x, int y) { return x >= 1 && x <= n && y >= 1 && y <= m; }
void run(int x, int y, int dis[N][N]) {
  vector<pair<int, int>> q;
  dis[x][y] = 1;
  q.push_back(make_pair(x, y));
  for (int i = 0; i < q.size(); i++) {
    int x = q[i].first, y = q[i].second;
    for (int j = 0; j < 8; j++)
      if (chk(x + dx[j], y + dy[j]) && !dis[x + dx[j]][y + dy[j]]) {
        q.push_back(make_pair(x + dx[j], y + dy[j]));
        dis[x + dx[j]][y + dy[j]] = dis[x][y] + 1;
      }
  }
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++) dis[i][j]--;
}
int get(int x0, int y0, int x1, int y1, bool st) {
  if (!st) {
    if (x0 == n / 2 && y0 == m / 2) return 0;
    for (int i = 0; i < 8; i++)
      if (x0 + dx[i] == x1 && y0 + dy[i] == y1) return 0;
    if (dis1[x0][y0] <= dis2[x1][y1]) {
      if (dis1[x0][y0] < dis1[x1][y1] || ((dis1[x0][y0] ^ dis1[x1][y1]) & 1))
        return 0;
      return 1;
    } else {
      if (dis2[x1][y1] + 1 < dis2[x0][y0] ||
          (~(dis2[x1][y1] ^ dis2[x0][y0]) & 1))
        return 1;
      return 0;
    }
  } else {
    if (x1 == n / 2 + 1 && y1 == m / 2) return 1;
    for (int i = 0; i < 8; i++)
      if (x0 + dx[i] == x1 && y0 + dy[i] == y1) return 1;
    if (dis2[x1][y1] <= dis1[x0][y0]) {
      if (dis2[x1][y1] < dis2[x0][y0] || ((dis2[x1][y1] ^ dis2[x0][y0]) & 1))
        return 1;
      return 0;
    } else {
      if (dis1[x0][y0] + 1 < dis1[x1][y1] ||
          (~(dis1[x0][y0] ^ dis1[x1][y1]) & 1))
        return 0;
      return 1;
    }
  }
}
set<long long> vis;
int main() {
  int x0, y0, x1, y1;
  scanf("%d%d%d%d%d%d", &n, &m, &x0, &y0, &x1, &y1);
  vis.insert((long long)x0 << 30 | y0 << 20 | x1 << 10 | y1);
  run(n / 2, m / 2, dis1);
  run(n / 2 + 1, m / 2, dis2);
  bool mt = get(x0, y0, x1, y1, 0) == 1;
  puts(mt ? "BLACK" : "WHITE");
  fflush(stdout);
  bool turn = 0;
  for (;;
       turn ^= 1, vis.insert((long long)x0 << 30 | y0 << 20 | x1 << 10 | y1)) {
    if (turn != mt) {
      if (turn == 0)
        scanf("%d%d", &x0, &y0);
      else
        scanf("%d%d", &x1, &y1);
      continue;
    }
    if (turn == 0) {
      int fdis = 1e9, ox, oy;
      for (int i = 0; i < 8; i++) {
        if (chk(x0 + dx[i], y0 + dy[i]) &&
            (get(x0 + dx[i], y0 + dy[i], x1, y1, 1) == 0 ||
             (x0 + dx[i] == x1 && y0 + dy[i] == y1))) {
          if (!vis.count((long long)(x0 + dx[i]) << 30 | (y0 + dy[i]) << 20 |
                         x1 << 10 | y1) &&
              dis1[x0 + dx[i]][y0 + dy[i]] < fdis) {
            ox = x0 + dx[i], oy = y0 + dy[i];
            fdis = dis1[x0 + dx[i]][y0 + dy[i]];
          }
        }
      }
      x0 = ox, y0 = oy;
      printf("%d %d\n", ox, oy);
      fflush(stdout);
      if (ox == n / 2 && oy == m / 2) return 0;
      if (ox == x1 && oy == y1) return 0;
    } else {
      int fdis = 1e9, ox, oy;
      for (int i = 0; i < 8; i++) {
        if (chk(x1 + dx[i], y1 + dy[i]) &&
            (get(x0, y0, x1 + dx[i], y1 + dy[i], 0) == 1 ||
             (x1 + dx[i] == x0 && y1 + dy[i] == y0))) {
          if (!vis.count((long long)x0 << 30 | y0 << 20 | (x1 + dx[i]) << 10 |
                         (y1 + dy[i])) &&
              dis2[x1 + dx[i]][y1 + dy[i]] < fdis) {
            ox = x1 + dx[i], oy = y1 + dy[i];
            fdis = dis2[x1 + dx[i]][y1 + dy[i]];
          }
        }
      }
      x1 = ox, y1 = oy;
      printf("%d %d\n", ox, oy);
      fflush(stdout);
      if (ox == n / 2 + 1 && oy == m / 2) return 0;
      if (ox == x0 && oy == y0) return 0;
    }
  }
}
