func_code_string: #include <bits/stdc++.h>   #pragma GCC optimize( Ofast,no-stack-protector )   #pragma GCC target(         sse,sse2,sse3,sse3,sse4,popcnt,abm,mmx,avx,avx2,tune=native )   #pragma GCC optimize( unroll-loops )   #pragma GCC optimize( fast-math )   using namespace std;   const int INF = 1e9 + 9;   const long long MAXN = 5e5 + 7;   const long long MAXN1 = 21;   const long long MAXN2 = 1e6 + 7;   const long long MOD = 998244353;   const long long PW = 31;   const long long BLOCK = 447;   void solve();   mt19937 mt(1e9 + 7);   signed main() {     srand( a  +  l  +  e  +  x  +  X  +  5  +  1  +  2 );     ios_base::sync_with_stdio(0);     cin.tie(0);     cout.tie(0);     int q = 1;     if (0) cin >> q;     while (q--) solve();   }   long long cnt[100];   struct Segment {     long long sum, _sum, sum_, _sum_;     int first, last, len;     Segment() : sum(1), _sum(1), sum_(1), _sum_(1), first(0), last(0), len(1) {}     Segment operator+(const Segment& other) const {       Segment now;       now.last = other.last;       now.first = first;       now.len = len + other.len;       now.sum = (sum * other.sum % MOD + (last == 1 ? 1 : 0) * sum_ *                                              cnt[last * 10 + other.first] % MOD *                                              other._sum) %                 MOD;       now._sum = (_sum * other.sum % MOD +                   (last == 1 && len > 1 ? 1 : 0) * _sum_ *                       cnt[last * 10 + other.first] % MOD * other._sum) %                  MOD;       now.sum_ = (sum * other.sum_ % MOD +                   (last == 1 && other.len > 1 ? 1 : 0) * sum_ *                       cnt[last * 10 + other.first] % MOD * other._sum_) %                  MOD;       now._sum_ = (_sum * other.sum_ % MOD +                    (last == 1 && other.len > 1 && len > 1 ? 1 : 0) * _sum_ *                        cnt[last * 10 + other.first] % MOD * other._sum_) %                   MOD;       return now;     }   };   Segment v[4 * MAXN];   void upd(int vert, int tl, int tr, int id, int now) {     if (tl == tr) {       v[vert].sum = cnt[now];       v[vert].last = v[vert].first = now;       return;     }     int tm = (tl + tr) / 2;     if (id <= tm)       upd(vert << 1, tl, tm, id, now);     else       upd(vert << 1 | 1, tm + 1, tr, id, now);     v[vert] = v[vert << 1] + v[vert << 1 | 1];   }   int get() { return v[1].sum; }   void solve() {     for (int i = 0; i < 10; ++i) {       for (int j = 0; j < 10; ++j) {         ++cnt[i + j];       }     }     int n, m;     cin >> n >> m;     for (int i = 0; i < n; ++i) {       char ch;       cin >> ch;       upd(1, 0, n - 1, i, ch -  0 );     }     for (int i = 0; i < m; ++i) {       int x, d;       cin >> x >> d;       upd(1, 0, n - 1, x - 1, d);       cout << get() <<   n ;     }   }   