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;
typedef long long ll;
#define ls (rt << 1)
#define rs (rt << 1 | 1)
const ll mod = 998244353;
const int maxn = 200000 + 10;
ll p[10][maxn], base[maxn];
int cov[maxn << 2];
int len[maxn << 2];
ll T[maxn << 2];
void pushup(int rt)
{
	T[rt] = (T[ls] * base[len[rs]] % mod + T[rs]) % mod;
}
void build(int rt, int l, int r)
{
	len[rt] = r - l + 1;
	T[rt] = p[1][len[rt]];
	if(l == r) return;
	int mid = l + r >> 1;
	build(ls, l, mid); build(rs, mid + 1, r);
}
void lazy(int rt, int d)
{
	cov[rt] = d;
	T[rt] = p[d][len[rt]];
}
void pushdown(int rt)
{
	if(cov[rt])
	{
		lazy(ls, cov[rt]);
		lazy(rs, cov[rt]);
		cov[rt] = 0;
	}
}
void update(int rt, int l, int r, int a, int b, int d)
{
	if(a <= l && r <= b)
	{
		lazy(rt, d);
		return;
	}
	int mid = l + r >> 1;
	pushdown(rt);
	if(a <= mid) update(ls, l, mid, a, b, d);
	if(b > mid) update(rs, mid + 1, r, a, b, d);
	pushup(rt);
}
int main()
{
	for(int i = 1; i <= 9; ++i) 
		for(int j = 1; j < maxn; ++j)
			p[i][j] = (p[i][j - 1] * 10 + i) % mod;
	base[0] = 1;
	for(int j = 1; j < maxn; ++j)
		base[j] = base[j - 1] * 10 % mod;
	int n, q;
	scanf("%d%d", &n, &q);
	build(1, 1, n);
	while(q--)
	{
		int l, r, d;
		scanf("%d%d%d", &l, &r, &d);
		update(1, 1, n, l, r, d);
		printf("%lld\n", T[1]);
	}
	return 0;
}