#nullable enable #region var (_input, _iter) = (Array.Empty(), 0); string String() { while (_iter >= _input.Length) (_input, _iter) = (Console.ReadLine()!.Split(' '), 0); return _input[_iter++]; } T I() where T : IParsable => T.Parse(String(), null); #endregion const int Mod = 998; var ans = new List(); var t = I(); while (t-- > 0) { var n = I(); var m = I(); var l = new List(); var d = new Dictionary(); var c = -1; var s = -1; { var np = 1; for (var i = 0; i < 2000; i++) { if (c < 0 && d.TryGetValue(np, out int value)) { s = value; c = i - s; } l.Add(np); d[np] = i; np = np * n % Mod; } } var (fs, cs) = (0, 0); for (var i = 0; i < s; i++) fs += l[i]; for (var i = 0; i < c; i++) cs += l[i + s]; fs %= Mod; cs %= Mod; for (var i = 0; i < m; i++) { var k = String(); // if (k.Length < 4) // { // var ki = int.Parse(k); // var sp = 0; // for (var j = 0; j <= ki; j++) sp += l[j]; // ans.Add(sp % Mod); // continue; // } var (p, q) = (0, 0); foreach (var kc in k) { var kd = kc - '0'; q = q * 10 + kd; var (kp, kq) = int.DivRem(q, c); p = (p * 10 + kp) % Mod; q = kq; } q -= s; if (q < 0) { q += c; p = (p - 1 + Mod) % Mod; } var kns = cs * p + fs; for (var j = 0; j <= q; j++) kns += l[j + s]; ans.Add(kns % Mod); } } Console.WriteLine(string.Join(Environment.NewLine, ans));