#include #define FOR(i, b, e) for(int i = b; i <= e; i++) #define FORD(i, b, e) for(int i = b; i >= e; i--) using namespace std; typedef long long LL; const int maxn = 1042; int n, m; char a[maxn][maxn]; int dp[maxn][maxn]; LL ans; int main() { ios_base::sync_with_stdio(false); cin >> n >> m; FOR(i, 1, n) FOR(j, 1, m) cin >> a[i][j]; FORD(i, n-1, 1) FORD(j, m-1, 1) { if(a[i][j] == a[i + 1][j] && a[i][j] == a[i][j+1]) { dp[i][j] = min(dp[i + 1][j], dp[i][j + 1]) + 1; ans += dp[i][j]; } } FOR(i, 1, n) FOR(j, 1, m) dp[i][j] = 0; FOR(i, 2, n) FOR(j, 2, m) { if(a[i][j] == a[i - 1][j] && a[i][j] == a[i][j-1]) { dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + 1; ans += dp[i][j]; } } FOR(i, 1, n) FOR(j, 1, m) dp[i][j] = 0; FORD(i, n - 1, 1) FOR(j, 2, m) { if(a[i][j] == a[i + 1][j] && a[i][j] == a[i][j - 1]) { dp[i][j] = min(dp[i + 1][j], dp[i][j - 1]) + 1; ans += dp[i][j]; } } FOR(i, 1, n) FOR(j, 1, m) dp[i][j] = 0; FOR(i, 2, n) FORD(j, m - 1, 1) if(a[i][j] == a[i - 1][j] && a[i][j] == a[i][j + 1]) { dp[i][j] = min(dp[i - 1][j], dp[i][j + 1]) + 1; ans += dp[i][j]; } cout << ans << '\n'; }