#include <bits/stdc++.h>
using namespace std;
inline long long read() {
  long long f = 1, sum = 0;
  char c = getchar();
  while (c < '0' || c > '9') {
    if (c == '-') f = -1;
    c = getchar();
  }
  while (c >= '0' && c <= '9') {
    sum = sum * 10 + c - '0';
    c = getchar();
  }
  return sum * f;
}
const int MAXN = 25;
const int CHARSET = 26;
int f[MAXN * 2][1 << 20], n;
char s[MAXN][MAXN];
int dfs(int x, int S) {
  if (f[x][S] < 0x3f3f3f3f) return f[x][S];
  int cnt = 0, ns = 0, a[CHARSET];
  if (x < 2 * n - 2) {
    memset(a, 0, sizeof(a));
    for (int i = 0; i <= x + 1; i++) {
      int nx = x + 1 - i, ny = i;
      if (nx >= n || ny >= n) continue;
      a[s[nx][ny] - 'a'] |= 1 << (cnt++);
    }
    for (int i = 0; i < CHARSET; i++) {
      if (x + 1 < n)
        ns = (S | (S << 1)) & a[i];
      else
        ns = (S | (S >> 1)) & a[i];
      if (!ns) continue;
      f[x][S] = min(f[x][S], -dfs(x + 1, ns));
    }
  } else
    f[x][S] = 0;
  for (int i = 0; i <= x; i++) {
    if ((S >> i) & 1) {
      int nx = min(n - 1, x) - i, ny = x - nx;
      if (s[nx][ny] == 'a')
        f[x][S] += (x & 1) ? -1 : 1;
      else if (s[nx][ny] == 'b')
        f[x][S] += (x & 1) ? 1 : -1;
      break;
    }
  }
  return f[x][S];
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) scanf("%s", s[i]);
  memset(f, 0x3f, sizeof(f));
  int ans = dfs(0, 1);
  if (!ans)
    printf("DRAW");
  else if (ans > 0)
    printf("FIRST");
  else
    printf("SECOND");
  return 0;
}
