import strformat const maxBest = 32 var best: array[maxBest, int] proc trySwaps(deck: seq[int], f, d, n: int) = if d > best[n]: best[n] = d for i in countdown(n - 1, 0): if deck[i] == -1 or deck[i] == i: break if d + best[i] <= best[n]: return var deck2 = deck for i in 1.. 0 and n < maxBest) best[n] = 0 var deck0 = newSeq[int](n + 1) for i in 1..