#include <bits/stdc++.h>
using namespace std;
const int kMaxN = 41;
int n;
char T[kMaxN][kMaxN];
int dp[kMaxN][1 << 20];
bool vs[kMaxN][1 << 20];
int inline cost(char c) {
  switch (c) {
    case 'a':
      return 1;
    case 'b':
      return -1;
    default:
      return 0;
  }
}
int dfs(int m, int s) {
  int best;
  int c;
  int mask[26];
  if (s == 2 * n - 2) {
    return cost(T[n][n]);
  }
  if (vs[s][m]) return dp[s][m];
  for (int i = 0; i <= min(n - 1, s); ++i) {
    if (1 << i & m) {
      c = cost(T[i + 1][s - i + 1]);
      break;
    }
  }
  fill_n(mask, 26, 0);
  for (int i = 0; i <= min(n - 1, s); ++i) {
    if (1 << i & m) {
      if (i < n - 1) {
        mask[T[i + 2][s - i + 1] - 'a'] |= 1 << i + 1;
      }
      if (s - i < n - 1) {
        mask[T[i + 1][s - i + 2] - 'a'] |= 1 << i;
      }
    }
  }
  if (s % 2 == 0) {
    best = 1000;
    for (int i = 0; i < 26; ++i) {
      if (mask[i]) {
        best = min(best, dfs(mask[i], s + 1));
      }
    }
  } else {
    best = -1000;
    for (int i = 0; i < 26; ++i) {
      if (mask[i]) {
        best = max(best, dfs(mask[i], s + 1));
      }
    }
  }
  best += c;
  dp[s][m] = best;
  vs[s][m] = true;
  return best;
}
int main(void) {
  int ret;
  scanf("%d", &n);
  for (int i = 1; i <= n; ++i) {
    scanf("%s", T[i] + 1);
  }
  for (int i = 1; i <= 2 * n - 1; ++i) {
    for (int j = 1; j <= 1 << 20; ++j) {
      vs[i][j] = false;
    }
  }
  ret = dfs(1, 0);
  if (ret > 0) {
    printf("FIRST\n");
  } else if (ret == 0) {
    printf("DRAW\n");
  } else {
    printf("SECOND\n");
  }
  return 0;
}
