解説

まず最初に思い付くのは、xx を求めてから 998244353998244353 で割る、という方法でしょう。しかし、制約より K=1018K = 10^{18} なのでC++などの言語では変数の値は確実にオーバーフローしますし、Pythonのような数値を可変長配列として保持するような言語でもxxの値の計算に時間がかかってしまいTLEします。 また、xx1+10+100+...1 + 10 + 100 + ... のように分解して逐次 998244353998244353 で割った値を足していくという方法も考えられますが、こちらもKKの値が大きいため計算に時間がかかりTLEします。そこで、次のように考えてみます。

xx1+10+100+...1+10+100+... のように分解して考えるというところまでは同じです。ここで、1+10+100+...1+10+100+... を「初項 11 , 公比 1010 の等比数列の和」として考えると、 x=10K19\displaystyle x = \frac{10^K-1}{9} となります。ここで、 10K10^K998244353998244353 で割った余りは繰り返し二乗法を用いて O(logK)O(logK) で計算できるので、答えとなる xx998244353998244353 で割った余りも逆元計算を用いて適切に計算することで時間計算量 O(logK)O(logK) で計算できます。コンピューターは一秒に 10610^6 回の計算ができるため、 本制約においては余裕を持って実行時間制限に間に合います。 よって、この問題を解くことができました。