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 int long long
using namespace std;
const int N=200005,mod=998244353;
int n,q,p[N],tr[N<<2],s[N<<2],tag[N<<2];
void build(int k,int l,int r)
{
	if(l==r)
	{
		s[k]=p[l];
		tr[k]=p[l];
		return;
	}
	int mid=l+r>>1;
	build(k<<1,l,mid);
	build(k<<1|1,mid+1,r);
	s[k]=(s[k<<1]+s[k<<1|1])%mod;
	tr[k]=(tr[k<<1]+tr[k<<1|1])%mod;
}
void pushdown(int k)
{
	if(tag[k])
	{
		tag[k<<1]=tag[k];
		tr[k<<1]=tag[k]*s[k<<1]%mod;
		tag[k<<1|1]=tag[k];
		tr[k<<1|1]=tag[k]*s[k<<1|1]%mod;
		tag[k]=0;
	}
}
void update(int k,int l,int r,int a,int b,int v)
{
	if(l==a&&r==b)
	{
		tr[k]=s[k]*v%mod;
		tag[k]=v;
		return;
	}
	pushdown(k);
	int mid=l+r>>1;
	if(b<=mid) update(k<<1,l,mid,a,b,v);
	else if(a>mid) update(k<<1|1,mid+1,r,a,b,v);
	else update(k<<1,l,mid,a,mid,v),update(k<<1|1,mid+1,r,mid+1,b,v);
	tr[k]=(tr[k<<1]+tr[k<<1|1])%mod;
}
signed main()
{
	ios::sync_with_stdio(false);
	cin>>n>>q;
	p[n]=1;
	for(int i=n-1;i>=1;i--)
		p[i]=p[i+1]*10%mod;
	build(1,1,n);	
	while(q--)
	{
		int l,r,v;
		cin>>l>>r>>v;
		update(1,1,n,l,r,v);
		cout<<tr[1]<<endl;
	}
	return 0;
}