#include //#include using namespace std; //using namespace atcoder; using ll = long long; using ld = long double; //using mint = modint998244353; int main(){ ll n; cin >> n; vector s(n); for(ll i = 0; i < n; i++){ cin >> s[i]; } vector>> dp(n,vector>(n,vector(n,0))); for(ll i = 0; i < n; i++){ dp[i][n-i-1][i] = 1; } for(ll i = n-1; i > 0; i--){ for(ll t = 0; t < i; t++){ ll x = i - t; ll y = t; ll xx = x; ll yy = y; xx--; for(ll u = 0; u < n; u++){ ll xd = u; ll yd = n-i-u; xd++; if(xd < n && yd < n){ if(s[xx][yy] == s[xd][yd]){ dp[xx][yy][xd] += dp[x][y][u]; dp[xx][yy][xd] %= 998244353; } } xd--; yd++; if(xd < n && yd < n){ if(s[xx][yy] == s[xd][yd]){ dp[xx][yy][xd] += dp[x][y][u]; dp[xx][yy][xd] %= 998244353; } } } xx++; yy--; for(ll u = 0; u < n; u++){ ll xd = u; ll yd = n-i-u; xd++; if(xd < n && yd < n){ if(s[xx][yy] == s[xd][yd]){ dp[xx][yy][xd] += dp[x][y][u]; dp[xx][yy][xd] %= 998244353; } } xd--; yd++; if(xd < n && yd < n){ if(s[xx][yy] == s[xd][yd]){ dp[xx][yy][xd] += dp[x][y][u]; dp[xx][yy][xd] %= 998244353; } } } } } cout << dp[0][0][0] << '\n'; return 0; }