#include <bits/stdc++.h>
using namespace std;
int trash1, trash2;
vector<pair<int, int> > movings = {{1, 2},  {1, -2},  {2, 1},  {2, -1},
                                   {-1, 2}, {-1, -2}, {-2, 1}, {-2, -1}};
int block(int n, int m, int x1, int y1, int xx, int yy, int& xpos, int& ypos,
          bool white) {
  vector<vector<bool> > visited(n, vector<bool>(m, false));
  queue<vector<int> > Q;
  Q.push({0, x1, y1});
  while (not Q.empty()) {
    vector<int> aux = Q.front();
    Q.pop();
    x1 = aux[1];
    y1 = aux[2];
    int d = aux[0];
    if (not visited[x1][y1]) {
      visited[x1][y1] = true;
      for (int i = 0; i < 8; ++i) {
        int x = movings[i].first, y = movings[i].second;
        if (x1 + x < n and x1 + x >= 0 and y1 + y < m and y1 + y >= 0) {
          if (x1 + x == xx and y1 + y == yy) {
            if (white and (n / 2 + 1 != x1 or m / 2 + 1 != y1) and
                (n / 2 + 1 != x1 or m / 2 - 3 != y1)) {
              xpos = x1;
              ypos = y1;
              return d;
            } else if (not white and (n / 2 - 2 != x1 or m / 2 + 1 != y1) and
                       (n / 2 - 2 != x1 or m / 2 - 3 != y1)) {
              xpos = x1;
              ypos = y1;
              return d;
            }
          }
          Q.push({d + 1, x1 + x, y1 + y});
        }
      }
    }
  }
  return 0;
}
int blocksss(int n, int m, int x1, int y1, int xx, int yy, bool white) {
  vector<vector<bool> > visited(n, vector<bool>(m, false));
  queue<vector<int> > Q;
  Q.push({0, x1, y1});
  while (not Q.empty()) {
    vector<int> aux = Q.front();
    Q.pop();
    x1 = aux[1];
    y1 = aux[2];
    int d = aux[0];
    if (not visited[x1][y1]) {
      visited[x1][y1] = true;
      for (int i = 0; i < 8; ++i) {
        int x = movings[i].first, y = movings[i].second;
        if (x1 + x < n and x1 + x >= 0 and y1 + y < m and y1 + y >= 0) {
          if (x1 + x == xx and y1 + y == yy) {
            return d;
          }
          Q.push({d + 1, x1 + x, y1 + y});
        }
      }
    }
  }
  return 0;
}
int win(int n, int m, int x1, int y1, int xx, int yy) {
  vector<vector<bool> > visited(n, vector<bool>(m, false));
  queue<vector<int> > Q;
  Q.push({0, x1, y1});
  while (not Q.empty()) {
    vector<int> aux = Q.front();
    Q.pop();
    x1 = aux[1];
    y1 = aux[2];
    int d = aux[0];
    if (x1 == xx and y1 == yy) return d;
    if (not visited[x1][y1]) {
      visited[x1][y1] = true;
      for (int i = 0; i < 8; ++i) {
        int x = movings[i].first, y = movings[i].second;
        if (x1 + x < n and x1 + x >= 0 and y1 + y < m and y1 + y >= 0) {
          Q.push({d + 1, x1 + x, y1 + y});
        }
      }
    }
  }
  return 0;
}
bool play(int n, int m, int x1, int y1, int xx, int yy, bool white) {
  vector<vector<int> > distance(n, vector<int>(m, 1e9));
  distance[x1][y1] = 0;
  vector<vector<pair<int, int> > > P(n, vector<pair<int, int> >(m, {x1, y1}));
  queue<vector<int> > Q;
  queue<vector<int> > empt;
  Q.push({0, x1, y1});
  bool stop = false;
  while (not Q.empty() and not stop) {
    vector<int> aux = Q.front();
    Q.pop();
    x1 = aux[1];
    y1 = aux[2];
    int d = aux[0];
    if (x1 == xx and y1 == yy) stop = true;
    for (int i = 0; i < 8 and not stop; ++i) {
      int x = movings[i].first, y = movings[i].second;
      if (x1 + x < n and x1 + x >= 0 and y1 + y < m and y1 + y >= 0) {
        if (d + 1 < distance[x1 + x][y1 + y]) {
          distance[x1 + x][y1 + y] = d + 1;
          P[x1 + x][y1 + y] = {x1, y1};
          Q.push({d + 1, x1 + x, y1 + y});
        }
      }
    }
  }
  vector<pair<int, int> > moves;
  while (P[xx][yy].first != xx and P[xx][yy].second != yy) {
    moves.push_back({xx, yy});
    pair<int, int> father = P[xx][yy];
    xx = father.first;
    yy = father.second;
  }
  if (moves.empty()) return false;
  for (int i = moves.size() - 1; i >= 0; --i) {
    int trash;
    if (not white) cin >> trash1 >> trash2;
    cout << moves[i].first + 1 << " " << moves[i].second + 1 << endl;
    if (white and i > 0) cin >> trash1 >> trash2;
  }
  return true;
}
int main() {
  int n, m, x1, y1, x2, y2;
  cin >> n >> m >> x1 >> y1 >> x2 >> y2;
  if (x1 == n / 2 and y1 == m / 2)
    cout << "WHITE" << endl;
  else if (x2 == n / 2 + 1 and y2 == m / 2)
    cout << "BLACK" << endl;
  else {
    --x1;
    --x2;
    --y1;
    --y2;
    bool end = false;
    for (int i = 0; i < 8 and not end; ++i) {
      int x = movings[i].first, y = movings[i].second;
      if (x1 + x == x2 and y1 + y == y2) {
        cout << "WHITE" << endl;
        cout << x2 + 1 << " " << y2 + 1 << endl;
        end = true;
      }
    }
    if (not end) {
      int xwhiteblock, ywhiteblock, xblackblock, yblackblock;
      int whitewins = win(n, m, x1, y1, n / 2 - 1, m / 2 - 1);
      int whiteblocks =
          block(n, m, x1, y1, n / 2, m / 2 - 1, xwhiteblock, ywhiteblock, true);
      int blackwins = win(n, m, x2, y2, n / 2, m / 2 - 1);
      int blackblocks = block(n, m, x2, y2, n / 2 - 1, m / 2 - 1, xblackblock,
                              yblackblock, false);
      int perhapswhite = blocksss(n, m, x1, y1, n / 2, m / 2 - 1, true);
      int perhapsblack = blocksss(n, m, x2, y2, n / 2 - 1, m / 2 - 1, true);
      bool white = ((x1 + y1) % 2 != (x2 + y2) % 2);
      if (whitewins < perhapsblack + 1 and whitewins <= blackwins) {
        cout << "WHITE" << endl;
        play(n, m, x1, y1, n / 2 - 1, m / 2 - 1, true);
      } else if (blackwins < perhapswhite and blackwins < whitewins) {
        cout << "BLACK" << endl;
        play(n, m, x2, y2, n / 2, m / 2 - 1, false);
      } else if (not white and blackwins < whitewins) {
        cout << "BLACK" << endl;
        play(n, m, x2, y2, n / 2, m / 2 - 1, false);
      } else if (white and whitewins < blackwins) {
        cout << "WHITE" << endl;
        play(n, m, x1, y1, n / 2 - 1, m / 2 - 1, true);
      } else {
        if (white) {
          cout << "WHITE" << endl;
          bool done = play(n, m, x1, y1, xwhiteblock, ywhiteblock, true);
          if (done) cin >> trash1 >> trash2;
          if (trash1 == n / 2 + 1 and trash2 == m / 2)
            cout << n / 2 + 1 << " " << m / 2 << endl;
          else {
            bool stop = false;
            for (int i = 0; i < movings.size() and not stop; ++i) {
              int x = movings[i].first, y = movings[i].second;
              for (int j = 0; j < movings.size() and not stop; ++j) {
                int xx = movings[j].first, yy = movings[j].second;
                if (xwhiteblock + x + xx == (n / 2 - 1) and
                    ywhiteblock + y + yy == (m / 2 - 1))
                  stop = true;
              }
              if (stop)
                cout << xwhiteblock + x + 1 << " " << ywhiteblock + y + 1
                     << endl;
            }
            cin >> trash1 >> trash2;
            cout << n / 2 << " " << m / 2 << endl;
          }
        } else {
          cout << "BLACK" << endl;
          play(n, m, x2, y2, xblackblock, yblackblock, false);
          cin >> trash1 >> trash2;
          if (trash1 == n / 2 and trash2 == m / 2)
            cout << n / 2 << " " << m / 2 << endl;
          else {
            bool stop = false;
            for (int i = 0; i < movings.size() and not stop; ++i) {
              int x = movings[i].first, y = movings[i].second;
              for (int j = 0; j < movings.size() and not stop; ++j) {
                int xx = movings[j].first, yy = movings[j].second;
                if (xblackblock + x + xx == n / 2 and
                    yblackblock + y + yy == m / 2 - 1)
                  stop = true;
              }
              if (stop)
                cout << xblackblock + x + 1 << " " << yblackblock + y + 1
                     << endl;
            }
            cout << n / 2 + 1 << " " << m / 2 << endl;
            cin >> trash1 >> trash2;
          }
        }
      }
    }
  }
}
