#include <bits/stdc++.h>
using namespace std;
const int N = 20, M = 2 * N - 1, MXMSK = 1 << N;
int sx[M], ex[M], lim[M], MSK, n, m;
int dp[2][MXMSK], ch[M][26];
string s[N];
inline bool leg(int x, int y) { return (x >= 0 && y >= 0 && x < n && y < n); }
inline int getv(char c) { return (c == 'a' ? 1 : c == 'b' ? -1 : 0); }
int main() {
  ios::sync_with_stdio(false);
  cout.tie(0);
  cin.tie(0);
  cin >> n;
  MSK = 1 << n;
  m = 2 * n - 1;
  for (int i = 0; i < n; i++) cin >> s[i];
  for (int i = 0; i < m; i++) sx[i] = max(i - n + 1, 0);
  for (int i = 0; i < m; i++) ex[i] = min(i + 1, n);
  for (int i = 0; i < m; i++) {
    lim[i] = (1 << ex[i]) - 1;
    if (sx[i]) lim[i] -= (1 << (sx[i] - 1)) - 1;
  }
  for (int i = 0; i < m; i++)
    for (int j = sx[i]; j < ex[i]; j++) ch[i][s[i - j][j] - 'a'] |= 1 << j;
  dp[(m - 1) % 2][1 << (n - 1)] = getv(s[n - 1][n - 1]);
  for (int i = m - 2; i >= 0; i--) {
    int cur = i % 2, pre = 1 - cur;
    if (i % 2 == 0)
      memset(dp[cur], 63, sizeof dp[cur]);
    else
      memset(dp[cur], -63, sizeof dp[cur]);
    for (int last = 0; last < 26; last++)
      for (int from = ch[i][last]; from; from = (from - 1) & ch[i][last]) {
        int posib = (from | (from << 1)) & lim[i + 1];
        for (int next = 0; next < 26; next++) {
          int to = (posib & ch[i + 1][next]);
          if (!to) continue;
          if (i % 2)
            dp[cur][from] = max(dp[cur][from], dp[pre][to] + getv(last + 'a'));
          else
            dp[cur][from] = min(dp[cur][from], dp[pre][to] + getv(last + 'a'));
        }
      }
  }
  cout << (dp[0][1] > 0 ? "FIRST" : dp[0][1] < 0 ? "SECOND" : "DRAW") << endl;
}
