#include <bits/stdc++.h>
using namespace std;
const long long INF = 1000000002ll * 1000000002ll;
char a[505][505];
int n, m;
bool ok(pair<long long, long long> a) {
  return (a.first >= 1 && a.first <= n && a.second >= 1 && a.second <= m);
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> m;
  for (int i = 1; i <= n; ++i)
    for (int j = 1; j <= m; ++j) cin >> a[i][j];
  vector<vector<long long> > dp(1);
  if (a[1][1] == a[n][m])
    dp[0].assign(1, 1);
  else
    dp[0].assign(1, 0);
  for (int i = 1; i < (n + m) >> 1; ++i) {
    vector<vector<long long> > dpp(i + 1);
    for (int j = 0; j <= i; ++j) dpp[j].assign(i + 1, 0ll);
    for (int j = 1; j <= i + 1; ++j) {
      for (int k = n; k >= n - i; --k) {
        pair<long long, long long> f = make_pair(j, i - j + 2);
        pair<long long, long long> s = make_pair(k, n + m - k - i);
        if (!ok(f) || !ok(s))
          dpp[j - 1][n - k] = 0;
        else {
          if (f.first > s.first || f.second > s.second)
            dpp[j - 1][n - k] = 0;
          else {
            if (a[f.first][f.second] == a[s.first][s.second]) {
              if (f.first != 1 && s.first != n) {
                dpp[j - 1][n - k] += dp[j - 2][n - k - 1];
                if (dpp[j - 1][n - k] >= 1000000007)
                  dpp[j - 1][n - k] -= 1000000007;
              }
              if (f.first != 1 && s.second != m) {
                dpp[j - 1][n - k] += dp[j - 2][n - k];
                if (dpp[j - 1][n - k] >= 1000000007)
                  dpp[j - 1][n - k] -= 1000000007;
              }
              if (f.second != 1 && s.first != n) {
                dpp[j - 1][n - k] += dp[j - 1][n - k - 1];
                if (dpp[j - 1][n - k] >= 1000000007)
                  dpp[j - 1][n - k] -= 1000000007;
              }
              if (f.second != 1 && s.second != m) {
                dpp[j - 1][n - k] += dp[j - 1][n - k];
                if (dpp[j - 1][n - k] >= 1000000007)
                  dpp[j - 1][n - k] -= 1000000007;
              }
            } else
              dpp[j - 1][n - k] = 0;
          }
        }
      }
    }
    swap(dp, dpp);
  }
  long long ans = 0;
  for (int i = 0; i < (n + m) / 2; ++i) {
    for (int j = 0; j < (n + m) / 2; ++j) {
      ans += dp[i][j];
      if (ans >= 1000000007) ans -= 1000000007;
    }
  }
  cout << ans;
  return 0;
}
