func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 201000;   struct str {     long long nr;     char c;   };   int n, m;   str a[2 * N], b[N], l[N];   vector<int> poz;   bool cmp(str a, str b) { return (a.nr == b.nr && a.c == b.c); }   int z[2 * N];   void calcpot() {     int i, j;     for (i = 1; i <= n; ++i) l[i] = a[i];     int nr = 0;     for (i = 2; i < n; ++i) {       a[++nr] = l[i];     }     for (i = 1; i <= m; ++i) a[++nr] = b[i];     int el, pmax = 0;     for (i = 2; i <= nr; ++i) {       if (i >= pmax) {         for (j = i; cmp(a[j], a[j - i + 1]) && j <= nr; ++j)           ;         --j;         z[i] = j - i + 1;         pmax = j;         el = i;       } else {         z[i] = min(z[i - el + 1], pmax - i + 1);         for (j = i + z[i] - 1; cmp(a[j], a[j - i + 1]) && j <= nr; ++j)           ;         --j;         z[i] = j - i + 1;         if (j > pmax) {           pmax = j;           el = i;         }       }       if (i > n - 2 && z[i] >= n - 2) {         poz.push_back(i - (n - 2));       }     }   }   void calc() {     int i, j;     calcpot();     int r = 0;     for (i = 0; i < poz.size(); ++i) {       int e = poz[i];       if (e > 1 && e + n - 2 <= m) {         if (l[1].c == b[e - 1].c && l[1].nr <= b[e - 1].nr)           if (l[n].c == b[e + n - 2].c && l[n].nr <= b[e + n - 2].nr) ++r;       }     }     cout << r;   }   int main() {     int i, j;     cin >> m >> n;     for (i = 1; i <= m; ++i) {       scanf( %I64d-%c  , &b[i].nr, &b[i].c);       if (i > 1 && b[i].c == b[i - 1].c) {         b[i - 1].nr += b[i].nr;         --m;         --i;       }     }     for (i = 1; i <= n; ++i) {       scanf( %I64d-%c  , &a[i].nr, &a[i].c);       if (i > 1 && a[i].c == a[i - 1].c) {         a[i - 1].nr += a[i].nr;         --n;         --i;       }     }     if (n == 1) {       long long r = 0;       for (i = 1; i <= m; ++i) {         if (a[1].c == b[i].c) r += max(0LL, b[i].nr - a[1].nr + 1);       }       cout << r;       return 0;     }     if (n == 2) {       if (m == 1) {         cout << 0;         return 0;       }       long long r = 0;       for (i = 1; i < m; ++i) {         if (a[1].c == b[i].c && a[2].c == b[i + 1].c && a[1].nr <= b[i].nr &&             a[2].nr <= b[i + 1].nr)           ++r;       }       cout << r;       return 0;     }     if (m < n) {       cout << 0;       return 0;     }     calc();     return 0;   }   