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;
const ll mod=998244353;
const int N=200005;
ll val[N<<2],inc[N<<2],pre[N],rp[N];
void push_up(int u,int len) {
	val[u]=(val[u<<1]+val[u<<1|1]*rp[len])%mod;
//	if (u==1) printf("{%d: %lld %lld %lld %d}\n",u,val[u],val[u<<1],val[u<<1|1],len);
}
void push_down(int u,int len1,int len2) {
	if (inc[u]) {
		val[u<<1]=inc[u]*pre[len1-1]%mod;
		val[u<<1|1]=inc[u]*pre[len2-1]%mod;
		inc[u<<1]=inc[u];
		inc[u<<1|1]=inc[u];
		inc[u]=0;
	}
}
void update(int u,int l,int r,int x,int y,ll v) {
	if (x<=l && r<=y) {
		inc[u]=v;
		val[u]=pre[r-l]*v%mod;
		return;
	}
	int mid=l+r>>1;
	push_down(u,mid-l+1,r-mid);
	if (x<=mid) update(u<<1,l,mid,x,y,v);
	if (y>mid) update(u<<1|1,mid+1,r,x,y,v);
	push_up(u,mid-l+1);
}
int main() {
	int n,q;
	scanf("%d %d",&n,&q);
	pre[0]=1;
	rp[0]=1;
	ll now=10;
	for (int i=1; i<=n+1; i++) {
		rp[i]=rp[i-1]*10%mod;
		pre[i]=(pre[i-1]+now)%mod;
		now=now*10%mod;
	}
	update(1,1,n,1,n,1);
	for (int i=1; i<=q; i++) {
		int l,r,d;
		scanf("%d %d %d",&l,&r,&d);
		update(1,1,n,n-r+1,n-l+1,d);
		printf("%lld\n",val[1]);
		//if (i==1) break;
	}
	return 0;
}