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 <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
typedef long long ll;
const int maxn=300050;
const ll MOD=998244353;
ll s[maxn<<2],s2[maxn<<2],val[maxn];
int laz[maxn<<2];
int n,q;

void pushup(int x){
	s[x]=(s[x<<1]+s[x<<1|1])%MOD;
}
void pushup2(int x){
	s2[x]=(s2[x<<1]+s2[x<<1|1])%MOD;
}
void pushdown2(int x){
	if(laz[x]){
		s2[x<<1]=s[x<<1]*laz[x]%MOD;
		s2[x<<1|1]=s[x<<1|1]*laz[x]%MOD;
		laz[x<<1]=laz[x];laz[x<<1|1]=laz[x];
		laz[x]=0;
	}
}
void build(int x,int l,int r){
	if(l==r){
		s[x]=s2[x]=val[l];return;	
	}
	int mid=(l+r)>>1;
	build(x<<1,l,mid);build(x<<1|1,mid+1,r);
	pushup(x);pushup2(x);
}
void update(int x,int l,int r,int L,int R,int d){
	if(L<=l&&r<=R){
		s2[x]=s[x]*d%MOD;
		laz[x]=d;return;
	}
	int mid=(l+r)>>1;
	pushdown2(x);
	if(mid>=L)	update(x<<1,l,mid,L,R,d);
	if(mid<R)	update(x<<1|1,mid+1,r,L,R,d);
	pushup2(x);
}
void solve(){
	scanf("%d %d",&n,&q);
	ll now=1;
	for(int i=n;i>=1;i--){
		val[i]=now;now=now*10%MOD;
	}
	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",s2[1]);
	}
}
int main(){
	solve();
	return 0;
}