/* -*- coding: utf-8 -*- * * 3429.cc: No.3429 Palindromic Path (Hard) - yukicoder */ #include #include using namespace std; /* constant */ const int MAX_N = 200; const int MOD = 998244353; /* typedef */ /* global variables */ char fs[MAX_N][MAX_N + 4]; int dp[MAX_N][MAX_N][MAX_N]; /* subroutines */ void addmod(int &a, int b) { a = (a + b) % MOD; } /* main */ int main() { int n; scanf("%d", &n); for (int i = 0; i < n; i++) scanf("%s", fs[i]); if (fs[0][0] != fs[n - 1][n - 1]) { puts("0"); return 0; } dp[0][0][0] = 1; for (int i = 0; i < n - 1; i++) for (int j0 = 0, y0 = i, x0 = 0; j0 <= i; j0++, y0--, x0++) for (int j1 = 0, y1 = n - 1, x1 = n - 1 - i; j1 <= i; j1++, y1--, x1++) if (dp[i][j0][j1]) for (int di = 0; di < 4; di++) { int d0 = (di >> 1), d1 = (di & 1); int vy0 = y0 + (d0 ^ 1), vx0 = x0 + d0; int vy1 = y1 - d1, vx1 = x1 - (d1 ^ 1); if (fs[vy0][vx0] == fs[vy1][vx1]) addmod(dp[i + 1][j0 + d0][j1 + d1], dp[i][j0][j1]); } int sum = 0; for (int j = 0; j < n; j++) addmod(sum, dp[n - 1][j][j]); printf("%d\n", sum); return 0; }