#include #include using namespace std; using ll = long long; #define rep(i, n) for (int i = 0; i < (int)(n); i++) using mint = atcoder::modint998244353; struct S{ mint a; bool x=false; }; int main(){ int n; cin >> n; vectors(n); rep(i,n)cin >> s[i]; vector memo(n,vector(n,vector(n))); auto dfs=[&](tuple in, auto &dfs){ auto [x,y,a,b]=in; if(x+y == a+b){ return mint(x==a?1:0); } if(x>a || y>b)return mint(0); if(s[x][y]!=s[a][b])return mint(0); if(memo[x][y][a].x)return memo[x][y][a].a; mint ans=0; ans+=dfs(make_tuple(x+1,y,a-1,b),dfs); ans+=dfs(make_tuple(x,y+1,a-1,b),dfs); ans+=dfs(make_tuple(x+1,y,a,b-1),dfs); ans+=dfs(make_tuple(x,y+1,a,b-1),dfs); memo[x][y][a].x=true; return memo[x][y][a].a=ans; }; cout << dfs(make_tuple(0,0,n-1,n-1),dfs).val() << endl; }