#include using namespace std; #define ll long long #define rep(i, n) for (int i = 0; i < (int)(n); i++) const long long mod=998244353; const long long mod2=469762049; int main(){ cin.tie(0)->sync_with_stdio(0); cout.tie(0); int N; cin>>N; char c[N+1][N+1]; for(int i=1;i<=N;i++){ for(int j=1;j<=N;j++) cin>>c[i][j]; } if(c[1][1]!=c[N][N]){ cout<<"0\n"; return 0; } ll dp[N+1][N+1][N+1];//i回移動したときに左上スタートが(j,?),右下スタートが(k,?)の数 for(int i=0;i<=N;i++){ for(int j=0;j<=N;j++){ for(int k=0;k<=N;k++) dp[i][j][k]=0; } } dp[0][1][N]=1; const bool dx[4]={1,1,0,0},dy[4]={0,1,0,1}; for(int i=0;iN || c2<=0 || c2>N) continue; for(int l=0;l<4;l++){ int nr1=r1,nc1=c1,nr2=r2,nc2=c2; if(dx[l]) nr1++; else nc1++; if(dy[l]) nr2--; else nc2--; if(nr1>N || nc1>N || nr2<=0 || nc2<=0) continue; if(c[nr1][nc1]!=c[nr2][nc2]) continue; dp[i+1][nr1][nr2]=(dp[i+1][nr1][nr2]+dp[i][r1][r2])%mod; } } } } ll ans=0; for(int i=1;i<=N;i++){ ans=(ans+dp[N-1][i][i])%mod; } cout<