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;
#define ll long long
#define m (l+r)/2
#define lson k<<1
#define rson k<<1|1
const int mod=998244353;
const int N=2e5+5;
ll tree[N<<2];
ll s[N];
int lzy[N<<2];
void pushdown(int k,int l,int r)
{
    if(lzy[k]==0)return ;
    lzy[lson]=lzy[rson]=lzy[k];
    tree[lson]=((s[m]-s[l-1]+mod)%mod)*lzy[k]%mod;
    tree[rson]=((s[r]-s[m]+mod)%mod)*lzy[k]%mod;
    lzy[k]=0;
    return ;
}
ll query(int k,int ql,int qr,int l,int r)
{
    if(ql<=l&&qr>=r)return tree[k];
    ll res=0;
    pushdown(k,l,r);
    if(ql<=m)
        res+=query(lson,ql,qr,l,m);
    if(qr>m)
        res+=query(rson,ql,qr,m+1,r);
    tree[k]=tree[lson]+tree[rson];
    return res;

}
void modify(int k,int ql,int qr,int l,int r,int val)
{
    if(ql<=l&&r<=qr)
    {
        lzy[k]=val;
        tree[k]=((s[r]-s[l-1]+mod)%mod)*val%mod;
        return ;
    }
    pushdown(k,l,r);
    if(ql<=m)
        modify(lson,ql,qr,l,m,val);
    if(qr>m)
        modify(rson,ql,qr,m+1,r,val);
    tree[k]=(tree[lson]+tree[rson])%mod;
    return ;
}
int main()
{
    int n,q;
    int x,y,z;
    scanf("%d%d",&n,&q);
    s[1]=1;
    for(int i=2;i<=n;i++)
    {
        s[i]=(s[i-1]*10+1)%mod;
    }
    modify(1,1,n,1,n,1);
    while(q--)
    {
        scanf("%d%d%d",&x,&y,&z);
        x=n-x+1;
        y=n-y+1;
        swap(x,y);
        modify(1,x,y,1,n,z);
        printf("%lld\n",tree[1]);
    }
}