#include using namespace std; #define rep(i,a,b) for(int i=a; i pii; const int duzo = 1007; char t[duzo][duzo]; int dp1[duzo][duzo], dp2[duzo][duzo], dp3[duzo][duzo], dp4[duzo][duzo]; int main() { ios_base::sync_with_stdio(0); // cin.tie(0); int n, m; cin >> n >> m; for(int i = 1; i <= n; ++i) { for(int j = 1; j <= m; ++j) { cin >> t[i][j]; } } for(int i = 2; i <= n; ++i) { for(int j = 2; j <= m; ++j) { if(t[i][j] == t[i - 1][j] && t[i][j] == t[i][j - 1]) dp1[i][j] = min(dp1[i][j - 1], dp1[i - 1][j]) + 1; } } for(int i = 2; i <= n; ++i) { for(int j = m - 1; j >= 1; --j) { if(t[i][j] == t[i - 1][j] && t[i][j] == t[i][j + 1]) dp2[i][j] = min(dp2[i][j + 1], dp2[i - 1][j]) + 1; } } for(int i = n - 1; i >= 1; --i) { for(int j = 2; j <= m; ++j) { if(t[i][j] == t[i + 1][j] && t[i][j] == t[i][j - 1]) dp3[i][j] = min(dp3[i][j - 1], dp3[i + 1][j]) + 1; } } for(int i = n - 1; i >= 1; --i) { for(int j = m - 1; j >= 1; --j) { if(t[i][j] == t[i + 1][j] && t[i][j] == t[i][j + 1]) dp4[i][j] = min(dp4[i][j + 1], dp4[i + 1][j]) + 1; } } for(int i = 1; i <= n; ++i) { for(int j = 1; j <= m; ++j) { cerr << dp1[i][j] << " "; } cerr << "\n"; } cerr << "\n"; for(int i = 1; i <= n; ++i) { for(int j = 1; j <= m; ++j) { cerr << dp2[i][j] << " "; } cerr << "\n"; } cerr << "\n"; for(int i = 1; i <= n; ++i) { for(int j = 1; j <= m; ++j) { cerr << dp3[i][j] << " "; } cerr << "\n"; } cerr << "\n"; for(int i = 1; i <= n; ++i) { for(int j = 1; j <= m; ++j) { cerr << dp4[i][j] << " "; } cerr << "\n"; } cerr << "\n"; ll sum = 0ll; for(int i = 1; i <= n; ++i) { for(int j = 1; j <= m; ++j) { sum += (ll)dp1[i][j]; sum += (ll)dp2[i][j]; sum += (ll)dp3[i][j]; sum += (ll)dp4[i][j]; } } cout << sum; return 0; }