#include <bits/stdc++.h>
using namespace std;
int dx[] = {0, 0, 1, 1, -1, -1, 0, -1, 1};
int dy[] = {0, 1, 0, -1, 0, 1, -1, -1, 1};
struct Node {
  int x, y, flag;
} node[100];
int check(int x, int y) {
  for (int i = 1; i <= 3; i++) {
    node[i].flag = 0;
  }
  for (int i = 1; i <= 3; i++) {
    if (x == node[i].x && y == node[i].y) {
      node[i].flag = 1;
      if (i == 3) return true;
    }
  }
  for (int i = 1; i <= 2; i++) {
    if (node[i].flag) continue;
    if (x == node[i].x) {
      int ff = 0;
      for (int j = 1; j <= 3; j++) {
        if (node[i].x == node[j].x) {
          if (y > node[i].y && node[j].y > node[i].y && node[j].y < y) {
            ff = 1;
          }
          if (y < node[i].y && node[j].y < node[i].y && node[j].y > y) {
            ff = 1;
          }
        }
      }
      if (!ff) return false;
    }
    if (y == node[i].y) {
      int ff = 1;
      for (int j = 1; j <= 3; j++) {
        if (node[j].flag) continue;
        if (node[i].y == node[j].y) {
          if (x > node[i].x && node[j].x > node[i].x && node[j].x < x) {
            ff = 0;
          }
          if (x < node[i].x && node[j].x < node[i].x && node[j].x > x) {
            ff = 0;
          }
        }
      }
      if (ff) return false;
    }
  }
  int p = node[3].x, q = node[3].y;
  for (int i = 1; i < 9; i++) {
    int pp = p + dx[i];
    int qq = q + dy[i];
    if (pp == x && qq == y) return false;
  }
  return true;
}
int main() {
  string s;
  for (int i = 1; i <= 4; i++) {
    cin >> s;
    int p = s[0] - 'a' + 1;
    int q = s[1] - '0';
    node[i].x = p;
    node[i].y = q;
  }
  for (int i = 0; i < 9; i++) {
    int xx = node[4].x + dx[i];
    int yy = node[4].y + dy[i];
    if (xx >= 1 && yy >= 1 && xx <= 8 && yy <= 8 && check(xx, yy)) {
      printf("OTHER\n");
      return 0;
    }
  }
  printf("CHECKMATE\n");
  return 0;
}
