#include <bits/stdc++.h>
using namespace std;
const int max_n = 20, inf = 100;
char* dp[max_n * 2 - 1];
bool* vis[max_n * 2 - 1];
char f[max_n][max_n];
string s[max_n * 2];
int n;
void find_vis() {
  for (int i = 0; i + 1 < 2 * n; ++i) {
    dp[i] = new char[1 << s[i].size()];
    vis[i] = new bool[1 << s[i].size()];
    memset(vis[i], 0, 1 << s[i].size());
  }
  vis[0][1] = 1;
  for (int i = 0; i + 2 < 2 * n; ++i) {
    int len = s[i].size();
    int nlen = s[i + 1].size();
    bool stepa = i % 2;
    for (int mask = 1; mask < (1 << len); ++mask) {
      if (!vis[i][mask]) continue;
      for (char ns : s[i + 1]) {
        int nxt_mask = 0;
        for (int k = 0; k < s[i].size(); ++k) {
          if ((mask & (1 << k)) == 0) continue;
          if (s[i + 1].size() > s[i].size()) {
            if (s[i + 1][k] == ns) {
              nxt_mask |= (1 << k);
            }
            if (s[i + 1][k + 1] == ns) {
              nxt_mask |= (1 << (k + 1));
            }
          } else {
            if (k && s[i + 1][k - 1] == ns) {
              nxt_mask |= (1 << (k - 1));
            }
            if (k + 1 < len && s[i + 1][k] == ns) {
              nxt_mask |= (1 << k);
            }
          }
        }
        if (nxt_mask == 0) continue;
        if (!vis[i + 1][nxt_mask]) {
          vis[i + 1][nxt_mask] = 1;
        }
      }
    }
  }
}
int main() {
  cin >> n;
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < n; ++j) {
      cin >> f[i][j];
    }
  }
  for (int j = 0; j < n; ++j) {
    for (int i = 0; i < n; ++i) {
      s[i + j] += f[i][j];
    }
  }
  find_vis();
  if (f[n - 1][n - 1] == 'a') {
    dp[2 * n - 2][1] = 1;
  } else if (f[n - 1][n - 1] == 'b') {
    dp[2 * n - 2][1] = -1;
  } else {
    dp[2 * n - 2][1] = 0;
  }
  bool stepa = false;
  for (int i = 2 * n - 3; i >= 0; --i) {
    int len = s[i].size();
    int nlen = s[i + 1].size();
    stepa = !stepa;
    for (int mask = 1; mask < (1 << len); ++mask) {
      if (!vis[i][mask]) continue;
      dp[i][mask] = stepa ? -inf : inf;
      char cs;
      for (int k = 0; k < len; ++k) {
        if (mask & (1 << k)) {
          cs = s[i][k];
        }
      }
      for (char ns : s[i + 1]) {
        int nxt_mask = 0;
        for (int k = 0; k < len; ++k) {
          if ((mask & (1 << k)) == 0) continue;
          if (s[i + 1].size() > s[i].size()) {
            if (s[i + 1][k] == ns) {
              nxt_mask |= (1 << k);
            }
            if (s[i + 1][k + 1] == ns) {
              nxt_mask |= (1 << (k + 1));
            }
          } else {
            if (k && s[i + 1][k - 1] == ns) {
              nxt_mask |= (1 << (k - 1));
            }
            if (k + 1 < len && s[i + 1][k] == ns) {
              nxt_mask |= (1 << k);
            }
          }
        }
        if (!vis[i + 1][nxt_mask]) continue;
        int val = dp[i + 1][nxt_mask];
        if (cs == 'a')
          ++val;
        else if (cs == 'b')
          --val;
        if (stepa) {
          dp[i][mask] = max(dp[i][mask], (char)val);
        } else {
          dp[i][mask] = min(dp[i][mask], (char)val);
        }
      }
    }
  }
  if (dp[0][1] > 0) {
    cout << "FIRST";
  } else if (dp[0][1] < 0) {
    cout << "SECOND";
  } else {
    cout << "DRAW";
  }
  return 0;
}
