#include <bits/stdc++.h>
using namespace std;
long long dp[505][505][2];
signed main() {
  long long n, m, i, j, k, d, x1, x2, y1, y2, x, y;
  string s[505];
  cin >> n >> m;
  for (i = 0; i < n; i++) cin >> s[i];
  for (d = (n + m - 2) / 2; d >= 0; d--) {
    for (x = 0; x < n; x++) {
      for (y = 0; y < n; y++) {
        x1 = x;
        y1 = d - x;
        x2 = n - 1 - y;
        y2 = n + m - 2 - x2 - d;
        if (x1 < 0 || x1 >= n || y1 < 0 || y1 >= m) continue;
        if (x2 < 0 || x2 >= n || y2 < 0 || y2 >= m) continue;
        if (x2 < x1 || y2 < y1) continue;
        if (s[x1][y1] != s[x2][y2]) continue;
        if (d == (n + m - 2) / 2) {
          if (abs(x1 - x2) + abs(y1 - y2) <= 1) dp[x][y][0] = 1;
        } else {
          if (x1 + 1 < n && x2 - 1 >= 0) dp[x][y][0] += dp[x + 1][y + 1][1];
          dp[x][y][0] %= 1000000007;
          if (x1 + 1 < n && y2 - 1 >= 0) dp[x][y][0] += dp[x + 1][y][1];
          dp[x][y][0] %= 1000000007;
          if (y1 + 1 < m && y2 - 1 >= 0) dp[x][y][0] += dp[x][y][1];
          dp[x][y][0] %= 1000000007;
          if (y1 + 1 < m && x2 - 1 >= 0) dp[x][y][0] += dp[x][y + 1][1];
          dp[x][y][0] %= 1000000007;
        }
      }
    }
    for (x = 0; x < n; x++)
      for (y = 0; y < n; y++)
        dp[x][y][1] = dp[x][y][0] % 1000000007, dp[x][y][0] = 0;
  }
  cout << dp[0][0][1] % 1000000007;
  return 0;
}
