#include using namespace std; //#define int int64_t #define el '\n' const int MOD=1e9+7; void Main() { int n, m; cin >> n >> m; vector> grid(n, vector(m)); for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { cin >> grid[i][j]; } } vector>> dp(n, vector>(m, vector(n, 0))); vector>> vis(n, vector>(m, vector(n, 0))); function solve = [&](int i, int j, int ii, int jj) -> int64_t { if (i >= n || j >= m || ii < i || jj < j)return 0; if (grid[i][j] != grid[ii][jj])return 0; if (abs(i - ii) + abs(j - jj) <= 1)return 1; if (vis[i][j][ii])return dp[i][j][ii]; vis[i][j][ii] = 1; int64_t &ret = dp[i][j][ii]; ret += solve(i + 1, j, ii - 1, jj); ret %= MOD; ret += solve(i, j + 1, ii, jj - 1); ret %= MOD; ret += solve(i + 1, j, ii, jj - 1); ret %= MOD; ret += solve(i, j + 1, ii - 1, jj); return ret %= MOD; }; cout << solve(0, 0, n - 1, m - 1) << el; } void Thaer(); int32_t main() { cin.tie(0)->sync_with_stdio(0); // Thaer(); int T = 1; // cin >> T; for (int i = 1; i <= T; ++i) { Main(); // if (i != T)cout << el; } } void Thaer() { if (fopen("input.txt", "r")) { freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); } }