#include <bits/stdc++.h>
using namespace std;
inline long long read() {
  long long x = 0, f = 1;
  char c = getchar();
  while ((c < '0' || c > '9') && (c != '-')) c = getchar();
  if (c == '-') f = -1, c = getchar();
  while (c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
  return x * f;
}
const int N = 1010;
int n, m;
pair<int, int> w, b;
const int dx[8] = {-2, -2, -1, -1, 1, 1, 2, 2};
const int dy[8] = {-1, 1, -2, 2, -2, 2, -1, 1};
int dis[2][N][N];
pair<int, int> pre[2][N][N];
inline void bfs(int k, int x, int y) {
  queue<pair<int, int> > q;
  q.push(make_pair(x, y)), dis[k][x][y] = 0;
  while (!q.empty()) {
    pair<int, int> u = q.front();
    q.pop();
    for (register int i = (0); i <= (7); i++) {
      int x = u.first + dx[i], y = u.second + dy[i];
      if (x < 1 || x > n || y < 1 || y > m) continue;
      if (dis[k][x][y] == -1) {
        dis[k][x][y] = dis[k][u.first][u.second] + 1;
        pre[k][x][y] = u, q.push(make_pair(x, y));
      }
    }
  }
}
pair<int, int> A, B;
inline pair<int, int> Move(pair<int, int> a) {
  printf("%d %d\n", a.first, a.second), fflush(stdout);
}
inline void alb(pair<int, int> a, pair<int, int> b) {
  for (register int i = (0); i <= (7); i++)
    if (a.first + dx[i] == b.first && a.second + dy[i] == b.second) {
      printf("%d %d\n", a.first + dx[i], a.second + dy[i]), fflush(stdout);
      exit(0);
    }
}
inline void solve1(int k) {
  if (!k)
    puts("WHITE"), fflush(stdout), A = w, B = b, alb(A, B);
  else
    puts("BLACK"), fflush(stdout), A = b, B = make_pair(read(), read()),
                                   swap(B.first, B.second), alb(A, B);
  while (233) {
    if (!dis[k][A.first][A.second]) break;
    A = pre[k][A.first][A.second], Move(A);
    if (!dis[k][A.first][A.second]) break;
    B = make_pair(read(), read()), swap(B.first, B.second), alb(A, B);
  }
}
inline void solve2(int k) {
  if (!k)
    puts("WHITE"), fflush(stdout), A = w, B = b, alb(A, B);
  else
    puts("BLACK"), fflush(stdout), A = b, B = make_pair(read(), read()),
                                   swap(B.first, B.second), alb(A, B);
  while (233) {
    if (!dis[k ^ 1][A.first][A.second]) break;
    A = pre[k ^ 1][A.first][A.second], Move(A);
    B = make_pair(read(), read()), swap(B.first, B.second), alb(A, B);
  }
  if (!k) {
    A.first--, A.second -= 2, Move(A), B = make_pair(read(), read()),
                                       swap(B.first, B.second), alb(A, B);
    A.first -= 2, A.second++, Move(A), B = make_pair(read(), read()),
                                       swap(B.first, B.second), alb(A, B);
    A.first += 2, A.second++, Move(A);
  } else {
    A.first++, A.second += 2, Move(A), B = make_pair(read(), read()),
                                       swap(B.first, B.second), alb(A, B);
    A.first += 2, A.second--, Move(A), B = make_pair(read(), read()),
                                       swap(B.first, B.second), alb(A, B);
    A.first -= 2, A.second--, Move(A);
  }
}
int main() {
  n = read(), m = read(), w = make_pair(read(), read()),
  b = make_pair(read(), read());
  swap(w.first, w.second), swap(b.first, b.second);
  memset((dis), (-1), sizeof(dis)), bfs(0, n / 2, m / 2),
      bfs(1, n / 2 + 1, m / 2);
  int disww = dis[0][w.first][w.second], diswb = dis[1][w.first][w.second];
  int disbw = dis[0][b.first][b.second], disbb = dis[1][b.first][b.second];
  int colw = (w.first + w.second) & 1, colb = (b.first + b.second) & 1;
  if (colw != colb) {
    if (disww <= disbb)
      solve1(0);
    else if (diswb >= disbb + 2)
      solve1(1);
    else
      solve2(0);
  } else {
    if (disbb <= disww - 1)
      solve1(1);
    else if (disbw >= disww + 1)
      solve1(0);
    else
      solve2(1);
  }
}
