#include <bits/stdc++.h>
using namespace std;
const int mod = 1000000007;
int main() {
  ios::sync_with_stdio(false);
  int n, m, d[2][502][502] = {}, z = 0;
  string s[502] = {};
  cin >> n >> m;
  for (int i = 0; i < n; i++) cin >> s[i];
  if (s[0][0] != s[n - 1][m - 1]) {
    cout << 0;
    return 0;
  }
  d[0][0][m - 1] = 1;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m && i + j + i + j + 1 < n + m; j++) {
      for (int l = 0; l < m; l++) {
        int k = n + m - 2 - i - j - l;
        if (k >= 0 && k < n && (i || j)) d[i & 1][j][l] = 0;
        if (k >= 0 && k < n && s[i][j] == s[k][l]) {
          if (i) {
            d[i & 1][j][l] += d[~i & 1][j][l];
            if (d[i & 1][j][l] >= mod) d[i & 1][j][l] -= mod;
            d[i & 1][j][l] += d[~i & 1][j][l + 1];
            if (d[i & 1][j][l] >= mod) d[i & 1][j][l] -= mod;
          }
          if (j) {
            d[i & 1][j][l] += d[i & 1][j - 1][l];
            if (d[i & 1][j][l] >= mod) d[i & 1][j][l] -= mod;
            d[i & 1][j][l] += d[i & 1][j - 1][l + 1];
            if (d[i & 1][j][l] >= mod) d[i & 1][j][l] -= mod;
          }
          if (abs(i - k) + abs(j - l) <= 1 && i <= k && j <= l) {
            z += d[i & 1][j][l];
            if (z >= mod) z -= mod;
          }
        }
      }
    }
  }
  cout << z;
}
