#include <bits/stdc++.h>
using namespace std;
int mod = 1000000007;
int a2, a3;
int n, l, r, mid;
int row[4][1009][1009];
int col[4][1009][1009];
int qqq[4][1009][1009];
int www[4][1009][1009];
long double l2, l3;
int ans2, ans3, ans;
char s[1009][1009];
void zz(int a, int b) {
  if (a >= ans2 && b >= ans3) {
    ans2 = a;
    ans3 = b;
    return;
  }
  if (a * l2 + b * l3 > ans2 * l2 + ans3 * l3) {
    ans2 = a;
    ans3 = b;
  }
}
long long mo(long long a, int x) {
  long long s = 1;
  while (x) {
    if (x & 1) s = s * a % mod;
    x >>= 1;
    a = a * a % mod;
  }
  return s;
}
int main() {
  l2 = logl(2);
  l3 = logl(3);
  scanf("%d", &n);
  for (int i = 1; i <= n; ++i) {
    scanf("%s", s[i] + 1);
    for (int j = 1; j <= n; ++j) {
      for (int k = 0; k < 4; ++k) {
        row[k][i][j] = row[k][i][j - 1];
        col[k][i][j] = col[k][i - 1][j];
        qqq[k][i][j] = qqq[k][i - 1][j - 1];
        www[k][i][j] = www[k][i - 1][j + 1];
      }
      row[s[i][j] - '0'][i][j]++;
      col[s[i][j] - '0'][i][j]++;
      qqq[s[i][j] - '0'][i][j]++;
      www[s[i][j] - '0'][i][j]++;
      if (s[i][j] != '0') ans = 1;
    }
  }
  if (ans == 0) {
    printf("0\n");
    return 0;
  }
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= n; ++j) {
      if (s[i][j] == '0') continue;
      l = 0;
      r = min(min(n - i, n - j), min(i - 1, j - 1));
      while (l < r) {
        mid = (l + r + 1) >> 1;
        if (row[0][i][j + mid] - row[0][i][j - mid - 1] == 0 &&
            col[0][i + mid][j] - col[0][i - mid - 1][j] == 0)
          l = mid;
        else
          r = mid - 1;
      }
      a2 = row[2][i][j + l] - row[2][i][j - l - 1] + col[2][i + l][j] -
           col[2][i - l - 1][j];
      a3 = row[3][i][j + l] - row[3][i][j - l - 1] + col[3][i + l][j] -
           col[3][i - l - 1][j];
      if (s[i][j] == '2')
        a2--;
      else if (s[i][j] == '3')
        a3--;
      zz(a2, a3);
      l = 0;
      r = min(min(n - i, n - j), min(i - 1, j - 1));
      while (l < r) {
        mid = (l + r + 1) >> 1;
        if (qqq[0][i + mid][j + mid] - qqq[0][i - mid - 1][j - mid - 1] == 0 &&
            www[0][i + mid][j - mid] - www[0][i - mid - 1][j + mid + 1] == 0)
          l = mid;
        else
          r = mid - 1;
      }
      a2 = qqq[2][i + l][j + l] - qqq[2][i - l - 1][j - l - 1] +
           www[2][i + l][j - l] - www[2][i - l - 1][j + l + 1];
      a3 = qqq[3][i + l][j + l] - qqq[3][i - l - 1][j - l - 1] +
           www[3][i + l][j - l] - www[3][i - l - 1][j + l + 1];
      if (s[i][j] == '2')
        a2--;
      else if (s[i][j] == '3')
        a3--;
      zz(a2, a3);
    }
  }
  printf("%I64d\n", mo(2, ans2) * mo(3, ans3) % mod);
  return 0;
}
