// output of ./demo/comb/perm-heap-demo.cc:
// Description:
//% Gray code for permutations, CAT algorithm.
//% Algorithm following
//% B. R. Heap: Permutations by Interchanges,
//% The Computer Journal, vol. 6, pp. 293-294, (1963).

arg 1: 4 == n  [Number of elements to permute, n > 0]  default=4
   0:    [ . 1 2 3 ]     (0, 0)     [ . . . ]    [ . . . ]        [ . 1 2 3 ]    [ . . . ]
   1:    [ 1 . 2 3 ]     (1, 0)     [ 1 . . ]    [ 1 . . ]        [ 1 . 2 3 ]    [ 1 . . ]
   2:    [ 2 . 1 3 ]     (2, 0)     [ . 1 . ]    [ 1 1 . ]        [ 1 2 . 3 ]    [ . 2 . ]
   3:    [ . 2 1 3 ]     (1, 0)     [ 1 1 . ]    [ . 1 . ]        [ . 2 1 3 ]    [ . 1 . ]
   4:    [ 1 2 . 3 ]     (2, 0)     [ . 2 . ]    [ . 2 . ]        [ 2 . 1 3 ]    [ 1 1 . ]
   5:    [ 2 1 . 3 ]     (1, 0)     [ 1 2 . ]    [ 1 2 . ]        [ 2 1 . 3 ]    [ 1 2 . ]
   6:    [ 3 1 . 2 ]     (3, 0)     [ . . 1 ]    [ 1 2 1 ]        [ 2 1 3 . ]    [ 1 . 3 ]
   7:    [ 1 3 . 2 ]     (1, 0)     [ 1 . 1 ]    [ . 2 1 ]        [ 2 . 3 1 ]    [ 1 . 2 ]
   8:    [ . 3 1 2 ]     (2, 0)     [ . 1 1 ]    [ . 1 1 ]        [ . 2 3 1 ]    [ . . 2 ]
   9:    [ 3 . 1 2 ]     (1, 0)     [ 1 1 1 ]    [ 1 1 1 ]        [ 1 2 3 . ]    [ . . 3 ]
  10:    [ 1 . 3 2 ]     (2, 0)     [ . 2 1 ]    [ 1 . 1 ]        [ 1 . 3 2 ]    [ 1 . 1 ]
  11:    [ . 1 3 2 ]     (1, 0)     [ 1 2 1 ]    [ . . 1 ]        [ . 1 3 2 ]    [ . . 1 ]
  12:    [ . 2 3 1 ]     (3, 1)     [ . . 2 ]    [ . . 2 ]        [ . 3 1 2 ]    [ . 1 1 ]
  13:    [ 2 . 3 1 ]     (1, 0)     [ 1 . 2 ]    [ 1 . 2 ]        [ 1 3 . 2 ]    [ . 2 1 ]
  14:    [ 3 . 2 1 ]     (2, 0)     [ . 1 2 ]    [ 1 1 2 ]        [ 1 3 2 . ]    [ . 1 3 ]
  15:    [ . 3 2 1 ]     (1, 0)     [ 1 1 2 ]    [ . 1 2 ]        [ . 3 2 1 ]    [ . 1 2 ]
  16:    [ 2 3 . 1 ]     (2, 0)     [ . 2 2 ]    [ . 2 2 ]        [ 2 3 . 1 ]    [ . 2 2 ]
  17:    [ 3 2 . 1 ]     (1, 0)     [ 1 2 2 ]    [ 1 2 2 ]        [ 2 3 1 . ]    [ . 2 3 ]
  18:    [ 3 2 1 . ]     (3, 2)     [ . . 3 ]    [ 1 2 3 ]        [ 3 2 1 . ]    [ 1 2 3 ]
  19:    [ 2 3 1 . ]     (1, 0)     [ 1 . 3 ]    [ . 2 3 ]        [ 3 2 . 1 ]    [ 1 2 2 ]
  20:    [ 1 3 2 . ]     (2, 0)     [ . 1 3 ]    [ . 1 3 ]        [ 3 . 2 1 ]    [ 1 1 2 ]
  21:    [ 3 1 2 . ]     (1, 0)     [ 1 1 3 ]    [ 1 1 3 ]        [ 3 1 2 . ]    [ 1 1 3 ]
  22:    [ 2 1 3 . ]     (2, 0)     [ . 2 3 ]    [ 1 . 3 ]        [ 3 1 . 2 ]    [ 1 2 1 ]
  23:    [ 1 2 3 . ]     (1, 0)     [ 1 2 3 ]    [ . . 3 ]        [ 3 . 1 2 ]    [ 1 1 1 ]
 ct=24
