proc nextperm . a[] . n = len a[] k = n - 1 while k >= 1 and a[k + 1] <= a[k] k -= 1 . if k = 0 a[] = [ ] return . l = n while a[l] <= a[k] l -= 1 . swap a[l] a[k] k += 1 while k < n swap a[k] a[n] k += 1 n -= 1 . . for i = 1 to 5 floors[] &= i . BAKER = 1 COOPER = 2 FLETCHER = 3 MILLER = 4 SMITH = 5 names$[] = [ "Baker" "Cooper" "Fletcher" "Miller" "Smith" ] # repeat if floors[BAKER] <> 5 and floors[COOPER] <> 1 and floors[FLETCHER] <> 1 and floors[FLETCHER] <> 5 if floors[MILLER] > floors[COOPER] and abs (floors[SMITH] - floors[FLETCHER]) <> 1 and abs (floors[FLETCHER] - floors[COOPER]) <> 1 for i to 5 print names$[i] & " lives on floor " & floors[i] . break 1 . . nextperm floors[] until len floors[] = 0 .