#include <bits/stdc++.h>
using namespace std;
int dx[] = {0, 1, 1, -1};
int dy[] = {1, 0, 0, 0};
template <class T>
inline void smin(T &a, T b) {
  if (a > b) a = b;
}
template <class T>
inline void smax(T &a, T b) {
  if (a < b) a = b;
}
pair<int, int> pos[55][55];
bool vst[55][(1 << 20) + 10];
int best[55][(1 << 20) + 10], can[55][33];
int id[55][22][22], cnt[55];
char grid[22][22];
int N;
int calc(int sum, int b) {
  if (sum == 2 * N - 2) return 0;
  if (vst[sum][b]) return best[sum][b];
  int i, bb, res, k, add;
  int r, c, rr, cc;
  bb = 0;
  for (i = 0; i < cnt[sum]; i++) {
    if (b & (1 << i)) {
      r = pos[sum][i].first;
      c = pos[sum][i].second;
      for (k = 0; k < 2; k++) {
        rr = r + dx[k];
        cc = c + dy[k];
        if ((rr < 0 || cc < 0 || rr >= N || cc >= N)) continue;
        bb |= (1 << id[sum + 1][rr][cc]);
      }
    }
  }
  if (sum % 2 == 0)
    res = 0x3f3f3f3f;
  else
    res = -0x3f3f3f3f;
  for (k = 0; k < 26; k++) {
    if (can[sum + 1][k] & bb) {
      add = 0;
      if (k == 0) add = 1;
      if (k == 1) add = -1;
      if (sum % 2 == 0)
        smin(res, add + calc(sum + 1, can[sum + 1][k] & bb));
      else
        smax(res, add + calc(sum + 1, can[sum + 1][k] & bb));
    }
  }
  vst[sum][b] = 1;
  return best[sum][b] = res;
}
int main() {
  int i, j, r, c;
  scanf("%d", &N);
  for (i = 0; i < N; i++) scanf("%s", grid[i]);
  for (i = 0; i < 2 * N - 1; i++) {
    for (r = 0; r < N; r++) {
      c = i - r;
      if (c >= 0 && c < N) {
        int k = grid[r][c] - 'a';
        can[i][k] += (1 << cnt[i]);
        id[i][r][c] = cnt[i];
        pos[i][cnt[i]++] = pair<int, int>(r, c);
      }
    }
  }
  int s = 0;
  if (grid[0][0] == 'a') s = 1;
  if (grid[0][0] == 'b') s = -1;
  s += calc(0, 1);
  if (s > 0)
    puts("FIRST");
  else if (s < 0)
    puts("SECOND");
  else
    puts("DRAW");
  return 0;
}
