#include <bits/stdc++.h>
using namespace std;
const int MaxN = 4e5 + 5;
const int md = 1e9 + 7;
const int Inf = 1e9;
int dp[500][500];
int New_dp[500][500];
int Mx[500][500];
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie();
  cout.tie();
  int N, M;
  cin >> N >> M;
  for (int i = 0; i < N; i++) {
    string s;
    cin >> s;
    for (int j = 0; j < M; j++) {
      Mx[i][j] = s[j] - 'a';
    }
  }
  if (Mx[0][0] != Mx[N - 1][M - 1]) {
    cout << 0;
    return 0;
  }
  dp[0][N - 1] = 1;
  int t;
  if ((N + M) & 1)
    t = ((N + M - 1) >> 1) - 1;
  else
    t = ((N + M - 1) >> 1);
  for (int i = 0; i < t; i++) {
    for (int x = 0; x < N; x++) {
      for (int a = 0; a < N; a++) {
        int y = i - x;
        int b = M - 1 - (i - (N - 1 - a));
        if (y < 0 || y >= M || b < 0 || b >= M) continue;
        if (x + 1 < N) {
          if (a - 1 >= 0 && x + 1 <= a - 1 && y <= b) {
            if (Mx[x + 1][y] == Mx[a - 1][b]) {
              New_dp[x + 1][a - 1] += dp[x][a];
              if (New_dp[x + 1][a - 1] >= md) New_dp[x + 1][a - 1] -= md;
            }
          }
          if (b - 1 >= 0 && x + 1 <= a && y <= b - 1) {
            if (Mx[x + 1][y] == Mx[a][b - 1]) {
              New_dp[x + 1][a] += dp[x][a];
              if (New_dp[x + 1][a] >= md) New_dp[x + 1][a] -= md;
            }
          }
        }
        if (y + 1 < M) {
          if (a - 1 >= 0 && x <= a - 1 && y + 1 <= b) {
            if (Mx[x][y + 1] == Mx[a - 1][b]) {
              New_dp[x][a - 1] += dp[x][a];
              if (New_dp[x][a - 1] >= md) New_dp[x][a - 1] -= md;
            }
          }
          if (b - 1 >= 0 && x <= a && y + 1 <= b - 1) {
            if (Mx[x][y + 1] == Mx[a][b - 1]) {
              New_dp[x][a] += dp[x][a];
              if (New_dp[x][a] >= md) New_dp[x][a] -= md;
            }
          }
        }
      }
    }
    swap(dp, New_dp);
    memset(New_dp, 0, sizeof(New_dp));
  }
  int Ans = 0;
  for (int i = 0; i < N; i++) {
    for (int j = 0; j < N; j++) {
      Ans += dp[i][j];
      if (Ans >= md) Ans -= md;
    }
  }
  cout << Ans << '\n';
  return 0;
}
