#include <bits/stdc++.h>
using namespace std;
template <typename T>
ostream& operator<<(ostream& os, const vector<T>& v) {
  for (auto i : v) os << i << " ";
  return os;
}
template <typename T>
ostream& operator<<(ostream& os, const set<T>& v) {
  for (auto i : v) os << i << " ";
  return os;
}
const int N = 41;
const int dx[] = {1, 1, 2, 2, -1, -1, -2, -2};
const int dy[] = {2, -2, 1, -1, 2, -2, 1, -1};
using pii = pair<int, int>;
int db[N][N];
int dw[N][N];
int ex[N][N];
bool vis[N][N];
int n, m;
void init() {
  pii S = {n / 2, m / 2};
  queue<pii> q;
  q.push(S);
  memset(dw, 0x3f, sizeof(dw));
  dw[n / 2][m / 2] = 0;
  while (!q.empty()) {
    pii u = q.front();
    q.pop();
    if (vis[u.first][u.second]) continue;
    vis[u.first][u.second] = true;
    for (int i = 0; i < 8; ++i) {
      pii v;
      v.first = u.first + dx[i];
      v.second = u.second + dy[i];
      if (v.first > 0 && v.first <= n && v.second > 0 && v.second <= m) {
        q.push(v);
        dw[v.first][v.second] =
            min(dw[u.first][u.second] + 1, dw[v.first][v.second]);
      }
    }
  }
  S = {n / 2 + 1, m / 2};
  memset(db, 0x3f, sizeof(db));
  memset(vis, 0, sizeof(vis));
  db[n / 2 + 1][m / 2] = 0;
  q.push(S);
  while (!q.empty()) {
    pii u = q.front();
    q.pop();
    if (vis[u.first][u.second]) continue;
    vis[u.first][u.second] = true;
    for (int i = 0; i < 8; ++i) {
      pii v;
      v.first = u.first + dx[i];
      v.second = u.second + dy[i];
      if (v.first > 0 && v.first <= n && v.second > 0 && v.second <= m) {
        q.push(v);
        db[v.first][v.second] =
            min(db[u.first][u.second] + 1, db[v.first][v.second]);
      }
    }
  }
  S = {n / 2, m / 2};
  memset(ex, 0x3f, sizeof(ex));
  for (int i = 0; i < 8; ++i) {
    pii v;
    v = {S.first + dx[i], S.second + dy[i]};
    q.push(v);
    ex[v.first][v.second] = 0;
  }
  memset(vis, 0, sizeof(vis));
  while (!q.empty()) {
    pii u = q.front();
    q.pop();
    if (vis[u.first][u.second]) continue;
    vis[u.first][u.second] = true;
    for (int i = 0; i < 8; ++i) {
      pii v;
      v.first = u.first + dx[i];
      v.second = u.second + dy[i];
      if (v.first > 0 && v.first <= n && v.second > 0 && v.second <= m) {
        q.push(v);
        ex[v.first][v.second] =
            min(ex[u.first][u.second] + 1, ex[v.first][v.second]);
      }
    }
  }
  ex[S.first][S.second] = -1;
}
bool inside(pii x) {
  return x.first >= 1 && x.second >= 1 && x.first <= n && x.second <= m;
}
int main() {
  scanf("%d%d", &n, &m);
  init();
  pii w, b;
  scanf("%d%d%d%d", &w.first, &w.second, &b.first, &b.second);
  pii TW = {n / 2, m / 2};
  pii TB = {n / 2 + 1, m / 2};
  bool atk, reach;
  atk = true;
  reach = false;
  for (int i = 0; i < 8; ++i) {
    pii v;
    v = {w.first + dx[i], w.second + dy[i]};
    if (!inside(v)) continue;
    bool flag = false;
    for (int j = 0; j < 8; ++j) {
      pii w;
      w = {b.first + dx[j], b.second + dy[j]};
      if (w == v) flag = true;
    }
    if (!flag) atk = false;
    if (v == TW) {
      if (flag) atk = true;
      reach = true;
      break;
    }
  }
  if (reach && !atk) {
    printf("WHITE\n");
    printf("%d %d\n", TW.first, TW.second);
    fflush(stdout);
    return 0;
  }
  int BB = db[b.first][b.second];
  int WW = dw[w.first][w.second];
  int BW = dw[b.first][b.second];
  int WB = db[w.first][w.second];
  if (WW + 1 <= BW && WW <= BB) {
    printf("WHITE\n");
    fflush(stdout);
    while (w != TW) {
      for (int i = 0; i < 8; ++i) {
        pii tmp;
        tmp = {w.first + dx[i], w.second + dy[i]};
        if (!inside(tmp)) continue;
        if (dw[tmp.first][tmp.second] < dw[w.first][w.second]) {
          w = tmp;
          printf("%d %d\n", w.first, w.second);
          fflush(stdout);
          if (w == b) return 0;
          if (w != TW) scanf("%d%d", &b.first, &b.second);
          break;
        }
      }
    }
    return 0;
  }
  if (BB + 2 <= WB && BB + 1 <= WW) {
    printf("BLACK\n");
    fflush(stdout);
    while (b != TB) {
      for (int i = 0; i < 8; ++i) {
        pii tmp;
        tmp = {b.first + dx[i], b.second + dy[i]};
        if (!inside(tmp)) continue;
        if (db[tmp.first][tmp.second] < db[b.first][b.second]) {
          b = tmp;
          printf("%d %d\n", tmp.first, tmp.second);
          fflush(stdout);
          if (b == w) return 0;
          if (b != TB) scanf("%d%d", &w.first, &w.second);
          break;
        }
      }
    }
    return 0;
  }
  if (((w.first + w.second) & 1) ^ ((b.first + b.second) & 1)) {
    printf("WHITE\n");
    fflush(stdout);
    if (WW <= BB) {
      while (w != TW) {
        for (int i = 0; i < 8; ++i) {
          pii tmp;
          tmp = {w.first + dx[i], w.second + dy[i]};
          if (!inside(tmp)) continue;
          if (dw[tmp.first][tmp.second] < dw[w.first][w.second]) {
            printf("%d %d\n", tmp.first, tmp.second);
            fflush(stdout);
            w = tmp;
            if (w == b) return 0;
            scanf("%d%d", &b.first, &b.second);
            break;
          }
        }
      }
    } else {
      while (w != TB) {
        for (int i = 0; i < 8; ++i) {
          pii tmp;
          tmp = {w.first + dx[i], w.second + dy[i]};
          if (!inside(tmp)) continue;
          if (db[tmp.first][tmp.second] < db[w.first][w.second]) {
            printf("%d %d\n", tmp.first, tmp.second);
            fflush(stdout);
            w = tmp;
            if (w == b) return 0;
            scanf("%d%d", &b.first, &b.second);
            break;
          }
        }
      }
      for (int i = 0; i < 8; ++i) {
        pii tmp;
        tmp = {w.first + dx[i], w.second + dy[i]};
        if (!inside(tmp)) continue;
        if (tmp == b) return 0 * printf("%d %d\n", tmp.first, tmp.second);
      }
      while (w != TW) {
        for (int i = 0; i < 8; ++i) {
          pii tmp;
          tmp = {w.first + dx[i], w.second + dy[i]};
          if (!inside(tmp)) continue;
          if (dw[tmp.first][tmp.second] < dw[w.first][w.second]) {
            printf("%d %d\n", tmp.first, tmp.second);
            fflush(stdout);
            w = tmp;
            if (w == b) return 0;
            scanf("%d%d", &b.first, &b.second);
            break;
          }
        }
      }
    }
    return 0;
  } else {
    printf("BLACK\n");
    fflush(stdout);
    scanf("%d%d", &w.first, &w.second);
    if (WW >= BB) {
      while (b != TB) {
        for (int i = 0; i < 8; ++i) {
          pii tmp;
          tmp = {b.first + dx[i], b.second + dy[i]};
          if (!inside(tmp)) continue;
          if (db[tmp.first][tmp.second] < db[b.first][b.second]) {
            b = tmp;
            printf("%d %d\n", tmp.first, tmp.second);
            fflush(stdout);
            if (w == b) return 0;
            scanf("%d%d", &w.first, &w.second);
            break;
          }
        }
      }
    } else {
      while (b != TW) {
        for (int i = 0; i < 8; ++i) {
          pii tmp;
          tmp = {b.first + dx[i], b.second + dy[i]};
          if (!inside(tmp)) continue;
          if (dw[tmp.first][tmp.second] < dw[b.first][b.second]) {
            b = tmp;
            printf("%d %d\n", tmp.first, tmp.second);
            fflush(stdout);
            if (w == b) return 0;
            scanf("%d%d", &w.first, &w.second);
            break;
          }
        }
      }
      for (int i = 0; i < 8; ++i) {
        pii tmp;
        tmp = {b.first + dx[i], b.second + dy[i]};
        if (!inside(tmp)) continue;
        if (tmp == w) return 0 * printf("%d %d\n", tmp.first, tmp.second);
      }
      while (b != TB) {
        for (int i = 0; i < 8; ++i) {
          pii tmp;
          tmp = {b.first + dx[i], b.second + dy[i]};
          if (!inside(tmp)) continue;
          if (db[tmp.first][tmp.second] < db[b.first][b.second]) {
            b = tmp;
            printf("%d %d\n", tmp.first, tmp.second);
            fflush(stdout);
            if (w == b) return 0;
            scanf("%d%d", &w.first, &w.second);
            break;
          }
        }
      }
    }
  }
  return 0;
}
