#include #include #include using namespace std; typedef long long ll; ll n, m; ll dyn(vector>& w) { vector> d(n); ll result = 0; for(ll i = 0; i < n; i++) { d[i].resize(m); for(ll j = 0; j < m; j++) { if(i == 0) d[i][j] = 1; else { char tl = 0; if(j > 0) tl = w[i - 1][j - 1]; if(tl == w[i][j] && tl == w[i - 1][j]) d[i][j] = min(d[i - 1][j], d[i - 1][j - 1]) + 1; else d[i][j] = 1; } result += d[i][j] - 1; } } return result; } int main() { cin >> n >> m; vector> world(n); for(ll i = 0; i < n; i++) { string s; cin >> s; for(char c : s) world[i].push_back(c); } ll result = 0; for(ll i = 0; i < 4; i++) { result += dyn(world); vector> nworld(m); for(ll x = 0; x < n; x++) { for(ll y = 0; y < m; y++) nworld[y].push_back(world[x][m - 1 - y]); } world = nworld; swap(n, m); } cout << result << endl; }