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>

using namespace std;

const int P = 998244353;
const int N = 200005;

long long ten[N];
long long pre[N];
long long sum[N * 4];
long long tag[N * 4];

void build(int l, int r, int x) {
	if(l == r) {
		sum[x] = 1;
		return;
	}
	int mid = l + r >> 1;
	build(l, mid, x << 1);
	build(mid + 1, r, x << 1 | 1);
	sum[x] = (sum[x << 1] * ten[r - mid] + sum[x << 1 | 1]) % P;
}

void pushdown(int x, int l, int r) {
	int mid = l + r >> 1;
	if(tag[x] != 0) {
		tag[x << 1] = tag[x];
		tag[x << 1 | 1] = tag[x];
		sum[x << 1] = pre[mid - l] * tag[x] % P;
		sum[x << 1 | 1] = pre[r - mid - 1] * tag[x] % P;
		tag[x] = 0;
	}
}

void update(int l, int r, int x, int a, int b, int d) {
	if(l > b || r < a) {
		return;
	}
	if(l >= a && r <= b) {
		tag[x] = d;
		sum[x] = pre[r - l] * d % P; 
		return;
	}
	pushdown(x, l, r);
	int mid = l + r >> 1;
	update(l, mid, x << 1, a, b, d);
	update(mid + 1, r, x << 1 | 1, a, b, d);
	sum[x] = (sum[x << 1] * ten[r - mid] + sum[x << 1 | 1]) % P;
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);

	int n, q;
	cin >> n >> q;

	ten[0] = 1;
	for(int i = 0; i < n; ++i) {
		ten[i + 1] = ten[i] * 10 % P;
	}
	pre[0] = ten[0];
	for(int i = 0; i < n; ++i) {
		pre[i + 1] = (pre[i] + ten[i + 1]) % P; 
	}

	build(1, n, 1);

	while(q--) {
		int l, r, d;
		cin >> l >> r >> d;
		update(1, n, 1, l, r, d);
		cout << sum[1] << '\n';
	}

	return 0;
}