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: 7e4348516d23877fe8bdd91cb147d6c2 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 # see https://github.com/zer0-star/Nim-ACL/tree/master/src/atcoder/extra/graph/graph_template.nim import atcoder/extra/graph/graph_template # see https://github.com/zer0-star/Nim-ACL/tree/master/src/atcoder/extra/graph/dijkstra.nim import atcoder/extra/graph/dijkstra proc solve() = let N, M = nextInt() var g = initGraph(N) for _ in M: let u, v = nextInt() - 1 g.addBiEdge(u, v) var d0 = g.dijkstra(0) d1 = g.dijkstra(N - 2) d2 = g.dijkstra(N - 1) ans = int.inf ans.min= min(int.inf, d0[N - 2] + d1[N - 1]) + d2[0] ans.min= min(int.inf, d0[N - 1] + d2[N - 2]) + d1[0] if ans == int.inf: echo -1 else: echo ans discard solve()