#include <bits/stdc++.h>
using namespace std;
inline long long read() {
  long long x = 0;
  char ch = getchar();
  bool f = 0;
  for (; !isdigit(ch); ch = getchar())
    if (ch == '-') f = 1;
  for (; isdigit(ch); ch = getchar()) x = x * 10 + ch - '0';
  return f ? -x : x;
}
void write(long long x) {
  if (x < 0) putchar('-'), x = -x;
  if (x >= 10) write(x / 10);
  putchar(x % 10 + '0');
}
void writeln(long long x) {
  write(x);
  puts("");
}
void writep(long long x) {
  write(x);
  putchar(' ');
}
const int N = 45, M = (1 << 20) + 5, inf = 1 << 30;
int n, m, f[N][M], pos[N][N], a[N][N];
char s[N][N];
vector<pair<int, int> > v[N];
bool used[N][M];
int dfs(int u, int s) {
  if (u == 2 * n - 1) return 0;
  if (used[u][s]) return f[u][s];
  int res = ((u & 1) ? inf : -inf);
  for (int k = (int)(0); k <= (int)(25); k++) {
    int t = 0, alb = 0;
    if (k == 0) t = 1;
    if (k == 1) t = -1;
    for (int i = (int)(0); i <= (int)((int)v[u].size() - 1); i++) {
      if ((s >> i) & 1) {
        int x = v[u][i].first, y = v[u][i].second;
        if (x + 1 <= n && a[x + 1][y] == k) alb |= (1 << pos[x + 1][y]);
        if (y + 1 <= n && a[x][y + 1] == k) alb |= (1 << pos[x][y + 1]);
      }
    }
    if (alb == 0) continue;
    if (u & 1)
      res = min(res, t + dfs(u + 1, alb));
    else
      res = max(res, t + dfs(u + 1, alb));
  }
  used[u][s] = 1;
  return f[u][s] = res;
}
int main() {
  n = read();
  for (int i = (int)(1); i <= (int)(n); i++) {
    scanf("%s", s[i] + 1);
    for (int j = (int)(1); j <= (int)(n); j++) a[i][j] = s[i][j] - 'a';
  }
  for (int i = (int)(1); i <= (int)(n); i++)
    for (int j = (int)(1); j <= (int)(n); j++) {
      pos[i][j] = v[i + j - 1].size();
      v[i + j - 1].push_back(make_pair(i, j));
    }
  int ans = dfs(1, 1);
  if (s[1][1] == 'a') ans++;
  if (s[1][1] == 'b') ans--;
  if (ans == 0)
    puts("DRAW");
  else if (ans > 0)
    puts("FIRST");
  else
    puts("SECOND");
}
