#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6 + 5;
const int mod = 998244353;
const int dx[] = {1, 1, 2, 2, -1, -1, -2, -2};
const int dy[] = {2, -2, 1, -1, 2, -2, 1, -1};
int A[1005][1005], B[1005][1005];
int C[1005][1005][2], D[1005][1005][2];
int main() {
  int n, m;
  scanf("%d%d", &n, &m);
  int x1, y1, x2, y2;
  scanf("%d%d%d%d", &x1, &y1, &x2, &y2);
  queue<int> Q;
  A[n / 2][m / 2] = 1;
  Q.push(n / 2), Q.push(m / 2);
  while (!Q.empty()) {
    int x = Q.front();
    Q.pop();
    int y = Q.front();
    Q.pop();
    for (int d = 0; d < 8; d++) {
      int nx = x + dx[d], ny = y + dy[d];
      if (nx >= 1 && nx <= n && ny >= 1 && ny <= m && A[nx][ny] == 0) {
        A[nx][ny] = A[x][y] + 1;
        C[nx][ny][0] = x;
        C[nx][ny][1] = y;
        Q.push(nx), Q.push(ny);
      }
    }
  }
  B[n / 2 + 1][m / 2] = 1;
  Q.push(n / 2 + 1), Q.push(m / 2);
  while (!Q.empty()) {
    int x = Q.front();
    Q.pop();
    int y = Q.front();
    Q.pop();
    for (int d = 0; d < 8; d++) {
      int nx = x + dx[d], ny = y + dy[d];
      if (nx >= 1 && nx <= n && ny >= 1 && ny <= m && B[nx][ny] == 0) {
        B[nx][ny] = B[x][y] + 1;
        D[nx][ny][0] = x;
        D[nx][ny][1] = y;
        Q.push(nx), Q.push(ny);
      }
    }
  }
  if ((x1 + y1) % 2 == (x2 + y2) % 2) {
    int k = A[x1][y1];
    if (B[x2][y2] < k) {
      puts("BLACK");
      fflush(stdout);
      while (x2 != n / 2 + 1 || y2 != m / 2) {
        scanf("%d%d", &x1, &y1);
        int nx2 = D[x2][y2][0], ny2 = D[x2][y2][1];
        printf("%d %d\n", nx2, ny2);
        fflush(stdout);
        x2 = nx2, y2 = ny2;
        if (x2 == x1 && y2 == y1) return 0;
      }
    } else if (A[x2][y2] > k) {
      int nx1 = C[x1][y1][0], ny1 = C[x1][y1][1];
      printf("WHITE\n%d %d\n", nx1, ny1);
      fflush(stdout);
      x1 = nx1, y1 = ny1;
      while (x1 != n / 2 || y1 != m / 2) {
        scanf("%d%d", &x2, &y2);
        nx1 = C[x1][y1][0], ny1 = C[x1][y1][1];
        printf("%d %d\n", nx1, ny1);
        fflush(stdout);
        x1 = nx1, y1 = ny1;
      }
    } else {
      puts("BLACK");
      fflush(stdout);
      while (x2 != n / 2 || y2 != m / 2) {
        scanf("%d%d", &x1, &y1);
        int nx2 = C[x2][y2][0], ny2 = C[x2][y2][1];
        printf("%d %d\n", nx2, ny2);
        fflush(stdout);
        x2 = nx2, y2 = ny2;
        if (x2 == x1 && y2 == y1) return 0;
      }
      scanf("%d%d", &x1, &y1);
      if (A[x1][y1] == 2) {
        printf("%d %d\n", x1, y1);
        fflush(stdout);
        return 0;
      }
      int nx2 = n / 2 + 1, ny2 = m / 2 + 2;
      printf("%d %d\n", nx2, ny2);
      fflush(stdout);
      x2 = nx2, y2 = ny2;
      if (x2 == x1 && y2 == y1) return 0;
      scanf("%d%d", &x1, &y1);
      nx2 = n / 2 + 3, ny2 = m / 2 + 1;
      printf("%d %d\n", nx2, ny2);
      fflush(stdout);
      x2 = nx2, y2 = ny2;
      if (x2 == x1 && y2 == y1) return 0;
      scanf("%d%d", &x1, &y1);
      nx2 = n / 2 + 1, ny2 = m / 2;
      printf("%d %d\n", nx2, ny2);
      fflush(stdout);
    }
  } else {
    int k = B[x2][y2];
    if (A[x1][y1] <= k) {
      int nx1 = C[x1][y1][0], ny1 = C[x1][y1][1];
      printf("WHITE\n%d %d\n", nx1, ny1);
      fflush(stdout);
      x1 = nx1, y1 = ny1;
      if (x1 == x2 && y1 == y2) return 0;
      while (x1 != n / 2 || y1 != m / 2) {
        scanf("%d%d", &x2, &y2);
        nx1 = C[x1][y1][0], ny1 = C[x1][y1][1];
        printf("%d %d\n", nx1, ny1);
        fflush(stdout);
        x1 = nx1, y1 = ny1;
        if (x1 == x2 && y1 == y2) return 0;
      }
    } else if (B[x1][y1] > k + 1) {
      puts("BLACK");
      fflush(stdout);
      while (x2 != n / 2 + 1 || y2 != m / 2) {
        scanf("%d%d", &x1, &y1);
        int nx2 = D[x2][y2][0], ny2 = D[x2][y2][1];
        printf("%d %d\n", nx2, ny2);
        fflush(stdout);
        x2 = nx2, y2 = ny2;
      }
    } else {
      if (x1 == n / 2 + 1 && y1 == m / 2) {
        puts("WHITE");
        fflush(stdout);
        if (B[x2][y2] == 2) {
          printf("%d %d\n", x2, y2);
          fflush(stdout);
          return 0;
        } else {
          int nx1 = n / 2, ny1 = m / 2 + 2;
          printf("%d %d\n", nx1, ny1);
          fflush(stdout);
          x1 = nx1, y1 = ny1;
          if (x1 == x2 && y1 == y2) return 0;
          scanf("%d%d", &x2, &y2);
          nx1 = n / 2 - 2, ny1 = m / 2 + 1;
          printf("%d %d\n", nx1, ny1);
          fflush(stdout);
          x1 = nx1, y1 = ny1;
          if (x1 == x2 && y1 == y2) return 0;
          scanf("%d%d", &x2, &y2);
          nx1 = n / 2, ny1 = m / 2;
          printf("%d %d\n", nx1, ny1);
          fflush(stdout);
        }
        return 0;
      }
      int nx1 = D[x1][y1][0], ny1 = D[x1][y1][1];
      printf("WHITE\n%d %d\n", nx1, ny1);
      fflush(stdout);
      x1 = nx1, y1 = ny1;
      if (x1 == x2 && y1 == y2) return 0;
      while (x1 != n / 2 + 1 || y1 != m / 2) {
        scanf("%d%d", &x2, &y2);
        nx1 = D[x1][y1][0], ny1 = D[x1][y1][1];
        printf("%d %d\n", nx1, ny1);
        fflush(stdout);
        x1 = nx1, y1 = ny1;
        if (x1 == x2 && y1 == y2) return 0;
      }
      scanf("%d%d", &x2, &y2);
      if (B[x2][y2] == 2) {
        printf("%d %d\n", x2, y2);
        fflush(stdout);
        return 0;
      }
      nx1 = n / 2, ny1 = m / 2 + 2;
      printf("%d %d\n", nx1, ny1);
      fflush(stdout);
      x1 = nx1, y1 = ny1;
      if (x1 == x2 && y1 == y2) return 0;
      scanf("%d%d", &x2, &y2);
      nx1 = n / 2 - 2, ny1 = m / 2 + 1;
      printf("%d %d\n", nx1, ny1);
      fflush(stdout);
      x1 = nx1, y1 = ny1;
      if (x1 == x2 && y1 == y2) return 0;
      scanf("%d%d", &x2, &y2);
      nx1 = n / 2, ny1 = m / 2;
      printf("%d %d\n", nx1, ny1);
      fflush(stdout);
    }
  }
  return 0;
}
