#include <iostream>
using namespace std;
const int mod = (int) 1e9 + 7;
void addmod(int& res, int add) {
res += add;
if (res >= mod) res -= mod;
}
int n;
char a[505][505];
int dp1[505][505];
int dp2[505][505];
int main() {
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%s", a[i]);
}
dp1[0][0] = 1;
for (int len = 0; len < n - 1; len++) {
for (int i = 0; i <= len + 1; i++) {
for (int j = 0; j <= len + 1; j++) {
dp2[i][j] = 0;
}
}
for (int i = 0; i <= len; i++) {
for (int j = 0; j <= len; j++) {
//cout << "check i="<<i<<" j="<<j<<" dp[i][j]="<<dp1[i][j]<<endl;
int ix = i;
int iy = len - i;
int jx = n - 1 - j;
int jy = n - 1 - (len - j);
if (a[ix + 1][iy] == a[jx - 1][jy]) {
addmod(dp2[i + 1][j + 1], dp1[i][j]);
}
if (a[ix + 1][iy] == a[jx][jy - 1]) {
addmod(dp2[i + 1][j], dp1[i][j]);
}
if (a[ix][iy + 1] == a[jx - 1][jy]) {
addmod(dp2[i][j + 1], dp1[i][j]);
}
if (a[ix][iy + 1] == a[jx][jy - 1]) {
addmod(dp2[i][j], dp1[i][j]);
}
}
}
//cout << "len = " << len << endl;
for (int i = 0; i <= len + 1; i++) {
for (int j = 0; j <= len + 1; j++) {
dp1[i][j] = dp2[i][j];
//cout << dp1[i][j] << " ";
}
//cout << endl;
}
}
int ans = 0;
for (int i = 0; i <= n; i++) {
addmod(ans, dp1[i][n - 1 - i]);
}
printf("%d\n", ans);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3QgaW50IG1vZCA9IChpbnQpIDFlOSArIDc7Cgp2b2lkIGFkZG1vZChpbnQmIHJlcywgaW50IGFkZCkgewoJcmVzICs9IGFkZDsKCWlmIChyZXMgPj0gbW9kKSByZXMgLT0gbW9kOwp9CgppbnQgbjsKY2hhciBhWzUwNV1bNTA1XTsKaW50IGRwMVs1MDVdWzUwNV07CmludCBkcDJbNTA1XVs1MDVdOwoKaW50IG1haW4oKSB7CglzY2FuZigiJWQiLCAmbik7Cglmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewoJCXNjYW5mKCIlcyIsIGFbaV0pOwoJfQoKCWRwMVswXVswXSA9IDE7Cglmb3IgKGludCBsZW4gPSAwOyBsZW4gPCBuIC0gMTsgbGVuKyspIHsKCQlmb3IgKGludCBpID0gMDsgaSA8PSBsZW4gKyAxOyBpKyspIHsKCQkJZm9yIChpbnQgaiA9IDA7IGogPD0gbGVuICsgMTsgaisrKSB7CgkJCQlkcDJbaV1bal0gPSAwOwoJCQl9CgkJfQoKCQlmb3IgKGludCBpID0gMDsgaSA8PSBsZW47IGkrKykgewoJCQlmb3IgKGludCBqID0gMDsgaiA8PSBsZW47IGorKykgewoJCQkJLy9jb3V0IDw8ICJjaGVjayBpPSI8PGk8PCIgaj0iPDxqPDwiIGRwW2ldW2pdPSI8PGRwMVtpXVtqXTw8ZW5kbDsKCQkJCWludCBpeCA9IGk7CgkJCQlpbnQgaXkgPSBsZW4gLSBpOwoJCQkJaW50IGp4ID0gbiAtIDEgLSBqOwoJCQkJaW50IGp5ID0gbiAtIDEgLSAobGVuIC0gaik7CgkJCQlpZiAoYVtpeCArIDFdW2l5XSA9PSBhW2p4IC0gMV1banldKSB7CgkJCQkJYWRkbW9kKGRwMltpICsgMV1baiArIDFdLCBkcDFbaV1bal0pOwoJCQkJfQoJCQkJaWYgKGFbaXggKyAxXVtpeV0gPT0gYVtqeF1bankgLSAxXSkgewoJCQkJCWFkZG1vZChkcDJbaSArIDFdW2pdLCBkcDFbaV1bal0pOwoJCQkJfQoJCQkJaWYgKGFbaXhdW2l5ICsgMV0gPT0gYVtqeCAtIDFdW2p5XSkgewoJCQkJCWFkZG1vZChkcDJbaV1baiArIDFdLCBkcDFbaV1bal0pOwoJCQkJfQoJCQkJaWYgKGFbaXhdW2l5ICsgMV0gPT0gYVtqeF1bankgLSAxXSkgewoJCQkJCWFkZG1vZChkcDJbaV1bal0sIGRwMVtpXVtqXSk7CgkJCQl9CgkJCX0KCQl9CgkJCgkJLy9jb3V0IDw8ICJsZW4gPSAiIDw8IGxlbiA8PCBlbmRsOwoJCWZvciAoaW50IGkgPSAwOyBpIDw9IGxlbiArIDE7IGkrKykgewoJCQlmb3IgKGludCBqID0gMDsgaiA8PSBsZW4gKyAxOyBqKyspIHsKCQkJCWRwMVtpXVtqXSA9IGRwMltpXVtqXTsKCQkJCS8vY291dCA8PCBkcDFbaV1bal0gPDwgIiAiOwoJCQl9CgkJCS8vY291dCA8PCBlbmRsOwoJCX0KCX0KCQoJaW50IGFucyA9IDA7Cglmb3IgKGludCBpID0gMDsgaSA8PSBuOyBpKyspIHsKCQlhZGRtb2QoYW5zLCBkcDFbaV1bbiAtIDEgLSBpXSk7Cgl9CgkKCXByaW50ZigiJWRcbiIsIGFucyk7Cn0K