#include <bits/stdc++.h>
using namespace std;
int N;
char mat[21][21];
int getSize(int d) { return min(d + 1, 2 * N - 1 - d); }
int getP(int i, int j, int d) { return min(j, N - 1 - i); }
int getI(int p, int d) { return d < N ? d - p : (N - 1 - p); }
int getJ(int p, int d) { return d - getI(p, d); }
short mem[1 << 21][42];
bool cat[1 << 21][42];
int dp(int mask, int d) {
  if (d == 2 * N - 1) return 0;
  if (cat[mask][d]) return mem[mask][d];
  int ans = 10000 * ((d & 1) ? 1 : -1);
  int SZ = getSize(d);
  for (int k = 0; k < SZ; ++k) {
    if (!(mask & (1 << k))) continue;
    char c = mat[getI(k, d)][getJ(k, d)];
    int nm = 0;
    for (int l = 0; l < SZ; ++l) {
      int ni = getI(l, d), nj = getJ(l, d);
      if (c != mat[ni][nj]) continue;
      if (!(mask & (1 << l))) continue;
      if (ni + 1 < N) nm |= 1 << (getP(ni + 1, nj, d));
      if (nj + 1 < N) nm |= 1 << (getP(ni, nj + 1, d));
    }
    int ad = c == 'a' ? 1 : (c == 'b' ? -1 : 0);
    int tem = dp(nm, d + 1) + ad;
    ans = (d & 1) ? min(ans, tem) : max(ans, tem);
  }
  cat[mask][d] = 1;
  return mem[mask][d] = ans;
}
int main() {
  cin >> N;
  for (int i = 0; i < N; ++i) cin >> mat[i];
  int t = dp(1, 0);
  cout << (t ? (t < 0 ? "SECOND" : "FIRST") : "DRAW") << endl;
}
