688 %! /w 595 def /h 842 def /ps 28 def /qsortswap { % array i j -- 2 index 1 index get % array i j a[j] 3 index 3 index get % array i j a[j] a[i] 4 index 4 -1 roll 3 -1 roll put % array i a[j] put } bind def /qsort { % array exec -- dup xcheck not { /lt load } if { 1 index length 1 le { exit } if 1 index 0 get 1 3 index length 1 sub % array exec pivot up down { { % decrement down until a[down] <= pivot 2 index 5 index 2 index get 5 index exec not { exit } if 1 sub } loop exch % array exec pivot down up { % increment up until pivot < a[up] 2 copy le { exit } if 2 index 5 index 2 index get 5 index exec { exit } if 1 add } loop exch % array exec pivot up down 2 copy ge { exit } if 2 copy 6 index 3 1 roll qsortswap } loop 3 1 roll pop pop % array exec down 2 index 0 2 index qsortswap dup 1 add 3 index length 1 index sub 4 index 3 1 roll getinterval exch % array exec subA down 3 index exch 0 exch getinterval % array exec subB subA 2 copy length exch length gt { exch } if 2 index qsort 3 -1 roll pop exch } loop pop pop } bind def 1 dict dup /PageSize [w h] put setpagedevice /tmparr 5000 array def /n 0 def (*) { tmparr n 2 index 100 string copy put pop /n n 1 add def } 100 string /Font resourceforall /vskip {ps 1.2 mul sub} def /y h vskip def tmparr 0 n getinterval dup qsort { dup cvn findfont ps scalefont setfont 10 y moveto show /y y vskip def y 10 lt { showpage /y h vskip def } if } forall showpage . 0