import os
import sys

import numpy as np


def solve(inp):
    SEGTREE_TABLES = []
    COMMON_STACK = np.zeros(10 ** 7, dtype=np.int64)
    MOD = 998244353

    def bit_length(n):
        ret = 0
        while n:
            n >>= 1
            ret += 1
        return ret

    def segtree_init(n):
        n2 = 1 << bit_length(n)
        table = np.zeros((n2 << 1, 3), np.int64)

        # 問題依存
        k = 1
        for i in range(n2 + n - 1, n2 - 1, -1):
            table[i, 0] = k
            k = k * 10 % MOD

        for i in range(n2 - 1, 0, -1):
            ch = i << 1
            table[i, 0] = (table[ch, 0] + table[ch + 1, 0]) % MOD

        table[:, 1] = -1
        table[:, 2] = table[:, 0]

        SEGTREE_TABLES.append(table)
        return len(SEGTREE_TABLES) - 1

    def segtree_debug_print(ins):
        table = SEGTREE_TABLES[ins]
        offset = table.shape[0] >> 1
        for t in range(table.shape[1]):
            i = 1
            while i <= offset:
                print(table[i:2 * i, t])
                i <<= 1

    def segtree_eval(table, offset, i):
        d = table[i, 1]
        if d == -1:
            return
        if i < offset:
            ch = i << 1
            table[ch, 1] = d
            table[ch + 1, 1] = d
        table[i, 0] = table[i, 2] * d % MOD
        table[i, 1] = -1

    def segtree_bottomup(table, i):
        lch = i << 1
        rch = lch + 1
        l_dat = table[lch, 0] if table[lch, 1] == -1 else table[lch, 1] * table[lch, 2] % MOD
        r_dat = table[rch, 0] if table[rch, 1] == -1 else table[rch, 1] * table[rch, 2] % MOD
        table[i, 0] = (l_dat + r_dat) % MOD

    def segtree_range_update(ins, l, r, d):
        table = SEGTREE_TABLES[ins]
        offset = table.shape[0] >> 1
        stack = COMMON_STACK
        stack[:3] = (1, 0, offset)
        si = 3
        updated = []
        while si:
            i, a, b = stack[si - 3:si]

            segtree_eval(table, offset, i)

            if b <= l or r <= a:
                si -= 3
                continue

            if l <= a and b <= r:
                table[i, 1] = d
                si -= 3
                continue

            updated.append(i)

            m = (a + b) // 2
            stack[si - 3:si] = (i << 1, a, m)
            stack[si:si + 3] = ((i << 1) + 1, m, b)
            si += 3

        while updated:
            i = updated.pop()
            segtree_bottomup(table, i)

    # def segtree_query(ins, l, r):
    #     """ sum [l, r) """
    #     table = SEGTREE_TABLES[ins]
    #     offset = table.shape[0] >> 1
    #     stack = COMMON_STACK
    #     stack[:3] = (1, 0, offset)
    #     si = 3
    #     res = INF
    #     updated = []
    #
    #     while si:
    #         i, a, b = stack[si - 3:si]
    #
    #         segtree_eval(table, offset, i)
    #
    #         if b <= l or r <= a:
    #             si -= 3
    #             continue
    #
    #         if l <= a and b <= r:
    #             res = min(res, table[i, 0])
    #             si -= 3
    #             continue
    #
    #         updated.append(i)
    #
    #         m = (a + b) // 2
    #         stack[si - 3:si] = (i << 1, a, m)
    #         stack[si:si + 3] = ((i << 1) + 1, m, b)
    #         si += 3
    #
    #     while updated:
    #         i = updated.pop()
    #         segtree_bottomup(table, i)
    #
    #     return res

    n = inp[0]
    q = inp[1]
    lll = inp[2::3] - 1
    rrr = inp[3::3]
    ddd = inp[4::3]

    ins = segtree_init(n)
    buf = []
    for i in range(q):
        l = lll[i]
        r = rrr[i]
        d = ddd[i]
        segtree_range_update(ins, l, r, d)
        buf.append(SEGTREE_TABLES[ins][1, 0])

    return buf


if sys.argv[-1] == 'ONLINE_JUDGE':
    from numba.pycc import CC

    cc = CC('my_module')
    cc.export('solve', '(i8[:],)')(solve)
    cc.compile()
    exit()

if os.name == 'posix':
    # noinspection PyUnresolvedReferences
    from my_module import solve
else:
    from numba import njit

    solve = njit('(i8[:],)', cache=True)(solve)
    print('compiled', file=sys.stderr)

inp = np.fromstring(sys.stdin.read(), dtype=np.int64, sep=' ')
ans = solve(inp)
print('\n'.join(map(str, ans)))


Measured memory_bytes: 130200