#include <bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f;
const long long infLL = 0x3f3f3f3f3f3f3f3fLL;
const int hash_mod = 1000037;
const double pi = acos(-1);
const double eps = 1e-10;
const int maxn = 20 + 2;
const int maxs = (1 << 20) + 2;
int n;
char g[maxn][maxn];
bool vis[maxn * 2][maxs];
int opt[maxn * 2][maxs];
void upmax(int &x, int y) {
  if (x == inf)
    x = y;
  else
    x = max(x, y);
}
void upmin(int &x, int y) {
  if (x == inf)
    x = y;
  else
    x = min(x, y);
}
int score(char ch) {
  if (ch > 'b') return 0;
  return ch == 'a' ? 1 : -1;
}
void dp(int d, int S) {
  if (vis[d][S]) return;
  vis[d][S] = true;
  if (d == n * 2 - 2) {
    opt[d][S] = 0;
    return;
  }
  opt[d][S] = inf;
  vector<pair<int, int> > point;
  for (int y = 0; y < n; ++y)
    if ((1 << y) & S) point.push_back(pair<int, int>(d - y, y));
  for (char ch = 'a'; ch <= 'z'; ++ch) {
    int S0 = 0;
    for (int i = 0; i < point.size(); ++i) {
      int x = point[i].first, y = point[i].second;
      if (x < n - 1 && g[x + 1][y] == ch) S0 |= (1 << y);
      if (y < n - 1 && g[x][y + 1] == ch) S0 |= (1 << y + 1);
    }
    if (!S0) continue;
    dp(d + 1, S0);
    if (d % 2 == 0)
      upmin(opt[d][S], opt[d + 1][S0] + score(ch));
    else
      upmax(opt[d][S], opt[d + 1][S0] + score(ch));
  }
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; ++i) scanf("%s", g[i]);
  dp(0, 1);
  int res = opt[0][1] + score(g[0][0]);
  if (res == 0) {
    puts("DRAW");
  } else {
    puts(res > 0 ? "FIRST" : "SECOND");
  }
  return 0;
}
