Problem:
Score : 500 points

Problem Statement

You have a string S of length N.
Initially, all characters in S are 1s.

You will perform queries Q times.
In the i-th query, you are given two integers L_i, R_i and a character D_i (which is a digit).
Then, you must replace all characters from the L_i-th to the R_i-th (inclusive) with D_i.

After each query, read the string S as a decimal integer, and print its value modulo 998,244,353.

Constraints

1 \leq N, Q \leq 200,000

1 \leq L_i \leq R_i \leq N

1 \leq D_i \leq 9

All values in input are integers.

Input

Input is given from Standard Input in the following format:

N Q
L_1 R_1 D_1
:
L_Q R_Q D_Q

Output

Print Q lines.
In the i-th line print the value of S after the i-th query, modulo 998,244,353.

Sample Input 1

8 5
3 6 2
1 4 7
3 8 3
2 2 2
4 5 1

Sample Output 1

11222211
77772211
77333333
72333333
72311333

Sample Input 2

200000 1
123 456 7

Sample Output 2

641437905

Don't forget to take the modulo.

Solution in C++ (GCC 9.2.1) (judge verdict: Time Limit Exceeded)

#include <bits/stdc++.h>
using namespace std;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
#define rep2(i, s, n) for (int i = (s); i < (int)(n); i++)

int main() {
  int n, q;
  cin >> n >> q;
  string s = "";
  int p = 8 - n % 8;
  int npad = n + p;
  rep(i, p) s += "0";
  rep(i, n) s += "1";
  // cout << s << endl;
  rep(i, q) {
    int l, r;
    char d;
    cin >> l >> r >> d;
    l += p; r += p;
    rep2(j, l-1, r) s.at(j) = d;
    long long ans = 0;
    for (int i = 0; i < npad; i += 8) {
      // cout << ans << endl;
      ans = (ans * 100000000 + stoll(s.substr(i, 8))) % 998244353;
    }
    // cout << s << endl;
    cout << ans << endl;
  }
}