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

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.

Examples

Input

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


Output

11222211
77772211
77333333
72333333
72311333


Input

200000 1
123 456 7


Output

641437905

Solution (in CPP):

Solution:
#include<bits/stdc++.h>
#define mod 998244353
using namespace std;
int power10[200001], sp[200001];
struct node {
	int tag, num;
}nd[800001];
void pushdown(int p, int l, int r) {
	if (!nd[p].tag) return;
	int mid = (l + r) / 2;
	nd[p*2].tag = nd[p*2+1].tag = nd[p].tag;
	nd[p*2].num = 1ll*nd[p].tag*sp[mid-l]%mod;
	nd[p*2+1].num = 1ll*nd[p].tag*sp[r-mid-1]%mod;
	nd[p].tag = 0;
}
void modify(int p, int l, int r, int l0, int r0, int num) {
	if (l >= l0 && r <= r0) {
		nd[p].tag = num, nd[p].num = 1ll*num*sp[r-l]%mod;
		return;
	}
	pushdown(p, l, r);
	int mid = (l + r) / 2;
	if (l0 <= mid) modify(p * 2, l, mid, l0, r0, num);
	if (r0 > mid) modify(p * 2 + 1, mid + 1, r, l0, r0, num);
	nd[p].num = (1ll*nd[p*2].num*power10[r-mid]+nd[p*2+1].num)%mod;
}
int main() {
	int n, q;
	cin >> n >> q;
	power10[0] = sp[0] = 1;
	for (int i = 1; i <= n; i++) power10[i] = power10[i-1]*10ll%mod, sp[i] = (sp[i-1]+power10[i]) % mod;
	modify(1, 1, n, 1, n, 1);
	for (int i = 1; i <= q; i++) {
		int l, r, d;
		cin >> l >> r >> d;
		modify(1, 1, n, l, r, d);
		cout << nd[1].num << endl;
	}
}