#include <bits/stdc++.h>
using namespace std;
int MIN(int a, int b) { return min(a, b); }
int MAX(int a, int b) { return max(a, b); }
int N, UP;
char in[25][25];
vector<vector<pair<int, int> > > base;
vector<vector<char> > cbase;
int go[45][30][25];
bool sosedi(pair<int, int> a, pair<int, int> b) {
  return abs(a.first - b.first) + abs(a.second - b.second) == 1;
}
int* dp[45];
int main() {
  scanf("%d", &N);
  UP = 2 * N - 1;
  for (int i = 0; i < N; ++i) {
    scanf("%s", &in[i]);
  }
  for (int i = 0; i < N; ++i) {
    base.push_back(vector<pair<int, int> >());
    cbase.push_back(vector<char>());
    for (int y = 0, x = i; x >= 0; --x, ++y)
      base.back().push_back(make_pair(x, y)), cbase.back().push_back(in[x][y]);
  }
  for (int j = 1; j < N; ++j) {
    base.push_back(vector<pair<int, int> >());
    cbase.push_back(vector<char>());
    for (int y = j, x = N - 1; y < N; --x, ++y)
      base.back().push_back(make_pair(x, y)), cbase.back().push_back(in[x][y]);
  }
  for (int i = 0; i + 1 < ((int)(base).size()); ++i)
    for (int j = 0; j < ((int)(base[i]).size()); ++j)
      for (char c = 'a'; c <= 'z'; ++c)
        for (int nbr = 0; nbr < ((int)(base[i + 1]).size()); ++nbr)
          if (cbase[i + 1][nbr] == c && sosedi(base[i][j], base[i + 1][nbr]))
            go[i][c - 'a'][j] |= (1 << nbr);
  dp[((int)(base).size()) - 1] = new int[2];
  dp[((int)(base).size()) - 1][1] = 0;
  for (int cur = ((int)(base).size()) - 1; cur > 0; --cur) {
    dp[cur - 1] = new int[1 << ((int)(base[cur - 1]).size())];
    typeof(&MIN) relax;
    if ((cur & 1) == 0) {
      relax = &MAX;
      fill(dp[cur - 1], dp[cur - 1] + (1 << ((int)(base[cur - 1]).size())),
           -1000000000);
    } else {
      relax = &MIN;
      fill(dp[cur - 1], dp[cur - 1] + (1 << ((int)(base[cur - 1]).size())),
           1000000000);
    }
    int RS = ((int)(base[cur - 1]).size()), UPTO = (1 << RS);
    for (int msk = 1; msk < UPTO; ++msk) {
      int& VAL = dp[cur - 1][msk];
      for (char put = 0; put < 26; ++put) {
        int nmsk = 0, nval = 0;
        if (put == 0)
          ++nval;
        else if (put == 1)
          --nval;
        int cmsk = msk, i;
        int* sft = go[cur - 1][put];
        for (i = __builtin_ctz(cmsk); cmsk != 0;
             cmsk ^= (1 << i), i = __builtin_ctz(cmsk))
          nmsk |= sft[i];
        if (nmsk != 0 && abs(dp[cur][nmsk]) != 1000000000)
          VAL = relax(VAL, nval + dp[cur][nmsk]);
      }
    }
  }
  int val = dp[0][1];
  if (in[0][0] == 'a') ++val;
  if (in[0][0] == 'b') --val;
  if (val > 0)
    puts("FIRST");
  else if (val < 0)
    puts("SECOND");
  else
    puts("DRAW");
  return 0;
}
