import macros macro Please(x): untyped = nnkStmtList.newTree() Please use Nim-ACL Please use Nim-ACL Please use Nim-ACL static: when not defined SecondCompile: # md5sum: 6f8db07592f759514dc56820d97e4a09 atcoder.tar.xz template getFileName():string = instantiationInfo().filename let fn = getFileName() block: let (output, ex) = gorgeEx("if [ -e ./atcoder ]; then exit 1; else exit 0; fi") # doAssert ex == 0, "atcoder directory already exisits" discard staticExec("echo \"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\" | base64 -d > atcoder.tar.xz && tar -Jxvf atcoder.tar.xz") let (output, ex) = gorgeEx("nim cpp -d:release -d:SecondCompile -d:danger --path:./ --opt:speed --multimethods:on --warning[SmallLshouldNotBeUsed]:off --checks:off -o:a.out " & fn) discard staticExec("rm -rf ./atcoder");doAssert ex == 0, output;quit(0) when defined SecondCompile: const DO_CHECK = false;const DEBUG = false else: const DO_CHECK = true;const DEBUG = true const USE_DEFAULT_TABLE = true DO_TEST = false # see https://github.com/zer0-star/Nim-ACL/tree/master/src/atcoder/extra/header/chaemon_header.nim include atcoder/extra/header/chaemon_header proc solve() = let T = nextInt() for _ in T: let M = nextInt() var d = Seq[9: nextInt()] var X = 0 for i in 9: for _ in d[i]: X *= 10 X += i + 1 X *= 10^9 let r = X mod M if X == 0: X = M elif r > 0: X += M - r doAssert X mod M == 0 doAssert X in 1 .. 10^18 echo X discard solve()