func_code_string: #include <bits/stdc++.h>   using namespace std;   void ga(int N, int *A) {     for (int i(0); i < N; i++) scanf( %d , A + i);   }   struct lt {     char c;     long long T;     bool operator<(const lt &r) const { return c != r.c ? T < r.T : c < r.c; }     bool operator==(const lt &r) const { return c == r.c && T == r.T; }     bool operator!=(const lt &r) const { return c != r.c || T != r.T; }   } T[(1 << 20)], P[(1 << 20)], I[(1 << 20)];   long long S;   void preKMP(lt *p, int *f) {     *f = -1;     for (int i(1), k; p[i + 1].c; ++i) {       k = f[i - 1];       while (~k && p[k] != p[i - 1]) k = f[k];       f[i] = k + 1;     }   }   int N, M, n, m, a;   int sm(int b) {     if (!b) return 0;     if (T[b - 1].c != P[0].c || T[b - 1].T < P[0].T) return 0;     if (T[b + m - 2].c != P[m - 1].c || T[b + m - 2].T < P[m - 1].T) return 0;     return 1;   }   void KMP(lt *p, lt *t, int m) {     static int f[(1 << 20)];     preKMP(p, f);     for (int i(0), k(0); t[i].c;)       if (!~k)         ++i, k = 0;       else if (t[i] == p[k]) {         ++i;         if (++k == m) S += sm(i - k), k = f[k - 1], --i;       } else         k = f[k];   }   char c;   int main(void) {     scanf( %d%d , &N, &M);     for (int i(0); i < N; i++) {       scanf( %d-%c , &a, &c);       if (i && T[n - 1].c == c)         T[n - 1].T += a;       else         T[n++] = {c, a};     }     T[n].c = 0;     for (int i(0); i < M; i++) {       scanf( %d-%c , &a, &c);       if (i && P[m - 1].c == c)         P[m - 1].T += a;       else         P[m++] = {c, a};     }     P[m].c = 0;     if (m == 1) {       for (int i(0); i < n; i++)         if (T[i].c == P[0].c) S += max(0ll, T[i].T - P[0].T + 1);     } else if (m == 2)       for (int i(0); i < n - 1; i++)         S += T[i].c == P[0].c && T[i].T >= P[0].T && T[i + 1].c == P[1].c &&              T[i + 1].T >= P[1].T;     else if (m == 3)       for (int i(0); i < n - 1; i++)         S += T[i + 1] == P[1] && T[i].c == P[0].c && T[i].T >= P[0].T &&              T[i + 2].c == P[2].c && T[i + 2].T >= P[2].T;     else       KMP(P + 1, T, m - 2);     printf( %lld n , S);     return 0;   }   