func_code_string: #include <bits/stdc++.h>   using namespace std;   void fastIO() {     std::ios_base::sync_with_stdio(0);     cin.tie(0);     cout.tie(0);   }   template <typename T, typename U>   inline void mnze(T &x, U y) {     if (y < x) x = y;   }   template <typename T, typename U>   inline void mxze(T &x, U y) {     if (x < y) x = y;   }   void _scan(int &x) { scanf( %d , &x); }   void _scan(long long &x) { scanf( %lld , &x); }   void _scan(double &x) { scanf( %lf , &x); }   void _scan(char &x) { scanf(  %c , &x); }   void _scan(char *x) { scanf( %s , x); }   template <typename T>   void _scan(vector<T> &v) {     for (int i = 0; i < (int)v.size(); i++) _scan(v[i]);   }   void scan() {}   template <typename T, typename... U>   void scan(T &head, U &...tail) {     _scan(head);     scan(tail...);   }   template <typename T>   void _dbg(const char *sdbg, T h) {     cerr << sdbg <<  =  << h <<   n ;   }   template <typename T, typename... U>   void _dbg(const char *sdbg, T h, U... t) {     while (*sdbg !=  , ) cerr << *sdbg++;     cerr <<  =  << h <<  , ;     _dbg(sdbg + 1, t...);   }   long long MOD = 1e9 + 7;   inline long long Msum(long long x) { return x; }   template <typename... Rest>   inline long long Msum(long long x, Rest... rest) {     return (x + Msum(rest...)) % MOD;   }   inline long long Mprod(long long x) { return x; }   template <typename... Rest>   inline long long Mprod(long long x, Rest... rest) {     return x * Mprod(rest...) % MOD;   }   inline long long Mnorm(long long x) { return (x % MOD + MOD) % MOD; }   inline long long Msq(long long x) { return (x * x) % MOD; }   inline long long Mpot(long long x, long long e) {     if (!e) return 1;     return Msq(Mpot(x, e >> 1)) * (e & 1 ? x : 1) % MOD;   }   const int MAXN = 2e3 + 3;   char g[MAXN][MAXN];   int x[MAXN][MAXN];   int R, C;   int main() {     scan(R, C);     for (int r = 0; r < R; r++) scan(g[r]);     for (int r = R - 1; r > -1; r--) {       for (int c = 0; c < C; c++) {         x[r][c] = 1;         char cc = g[r][c];         if (r + 2 >= R) continue;         if (g[r + 1][c] != cc) continue;         if (g[r + 2][c] != cc) continue;         if (c - 1 < 0) continue;         if (g[r + 1][c - 1] != cc) continue;         if (c + 1 >= C) continue;         if (g[r + 1][c + 1] != cc) continue;         x[r][c] = min(x[r + 2][c], min(x[r + 1][c - 1], x[r + 1][c + 1])) + 1;       }     }     long long ans = 0;     for (int r = R - 1; r > -1; r--)       for (int c = 0; c < C; c++) {         ans += x[r][c];       }     printf( %lld n , ans);   }   