Dim Shared As Byte n, d, best(16) Sub TrySwaps(A() As Byte, f As Byte, s As Byte) Dim As Byte B(16), i, j, k If d > best(n) Then best(n) = d Do If A(s) = -1 Or A(s) = s Then Exit Do If d+best(s) <= best(n) Then Exit Sub If s = 0 Then Exit Do s -= 1 Loop d += 1 For i = 0 To s B(i) = A(i) Next k = 1 For i = 1 To s k Shl= 1 If B(i) =- 1 AndAlso (f And k) = 0 Or B(i) = i Then j = i B(0) = j While j j -= 1 B(i-j) = A(j) Wend TrySwaps(B(), f Or k, s) End If Next d -= 1 End Sub Dim As Byte i, X(16) For i = 0 To 16-1 X(i) = -1 best(i) = 0 Next i X(0) = 0 For n = 1 To 13 d = 0 TrySwaps(X(), 1, n-1) Print Using "##: ##"; n; best(n) Next n Sleep