code ChOut=8, CrLf=9, IntOut=11; int N, Max, Card1(16), Card2(16); proc Topswop(D); \Conway's card swopping game int D; \depth of recursion int I, J, C, T; [if D # N then \generate N! permutations of 1..N in Card1 [for I:= 0 to N-1 do [for J:= 0 to D-1 do \check if object (letter) already used if Card1(J) = I+1 then J:=100; if J < 100 then [Card1(D):= I+1; \card number not used so append it Topswop(D+1); \recurse next level deeper ]; ]; ] else [\determine number of topswops to get card 1 at beginning for I:= 0 to N-1 do Card2(I):= Card1(I); \make working copy of deck C:= 0; \initialize swop counter while Card2(0) # 1 do [I:= 0; J:= Card2(0)-1; while I < J do [T:= Card2(I); Card2(I):= Card2(J); Card2(J):= T; I:= I+1; J:= J-1; ]; C:= C+1; ]; if C>Max then Max:= C; ]; ]; [for N:= 1 to 10 do [Max:= 0; Topswop(0); IntOut(0, N); ChOut(0, ^ ); IntOut(0, Max); CrLf(0); ]; ]