#include #include #define rep(i, a, b) for (ll i = (ll)(a); i < (ll)(b); i++) using namespace atcoder; using namespace std; typedef long long ll; using mint = modint998244353; void solve() { int n; cin >> n; vector s(n); rep(i, 0, n) cin >> s[i]; mint dp[n][n][n]; rep(i, 0, n) rep(j, 0, n) rep(k, 0, n) dp[i][j][k] = 0; if (s[0][0] != s[n - 1][n - 1]) { cout << "0\n"; return; } dp[0][0][n - 1] = 1; rep(i, 0, n - 1) rep(j, 0, n) rep(k, 0, n) { if (dp[i][j][k] == 0) continue; int xi = j, xj = i - j; int yi = k, yj = 2 * n - 2 - i - k; // RL if (s[xi][xj + 1] == s[yi][yj - 1]) { dp[i + 1][j][k] += dp[i][j][k]; } // RU if (s[xi][xj + 1] == s[yi - 1][yj]) { dp[i + 1][j][k - 1] += dp[i][j][k]; } // DL if (s[xi + 1][xj] == s[yi][yj - 1]) { dp[i + 1][j + 1][k] += dp[i][j][k]; } // DU if (s[xi + 1][xj] == s[yi - 1][yj]) { dp[i + 1][j + 1][k - 1] += dp[i][j][k]; } } mint ans = 0; rep(i, 0, n) ans += dp[n - 1][i][i]; cout << ans.val() << endl; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout << fixed << setprecision(15); solve(); }