#include <bits/stdc++.h>
using namespace std;
int n, m;
char a[511][511];
int dp[2][511][511];
int mod = 1000000007;
int main() {
  cin >> n >> m;
  for (int i = 0; i < n; i++) scanf("%s", &a[i]);
  int len = n + m - 1;
  int l = (len) / 2 + (len % 2);
  int flag = 1;
  for (int i = n - 1; i >= 0; i--) {
    for (int j = m - 1; j >= 0; j--) {
      for (int k = 0; k < n; k++) {
        int d = i + j;
        int t = (n - 1) - k;
        int l = (m - 1) - (d - t);
        int res = 0;
        if (l < 0 || l >= m)
          res = 0;
        else if (i == k && j == l)
          res = 1;
        else if (i > k || j > l)
          res = 0;
        else if (a[i][j] == a[k][l]) {
          if (i + 1 == k && j == l)
            res = 1;
          else if (i == k && j + 1 == l)
            res = 1;
          else {
            int r1 = 0, r2 = 0, r3 = 0, r4 = 0;
            if (k - 1 >= 0 && i != n - 1) r1 = dp[!flag][j][k - 1];
            if (i != n - 1) r2 = dp[!flag][j][k];
            if (k != 0 && j + 1 < m) r3 = dp[flag][j + 1][k - 1];
            if (j + 1 < m) r4 = dp[flag][j + 1][k];
            res = ((r1 + r2) % mod + (r3 + r4) % mod) % mod;
          }
        }
        dp[flag][j][k] = res;
      }
    }
    flag = !flag;
  }
  int res = dp[!flag][0][n - 1];
  cout << res << endl;
}
