Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Pygments / examplefiles / output / Sorting.mod
Size: Mime:
€]q(cpygments.token
_TokenType
qXKeywordqXReservedq†q…qq}q(Xsubtypesqcbuiltins
set
q	]q
…qRqXparentq
hh…q…qq}q(hh	]q(hhXWordq†q…qq}q(hh	]q…qRqh
hubhhh†q…qq}q(hh	]q…q Rq!h
hubhhXTypeq"†q#…q$q%}q&(hh	]q'…q(Rq)h
hubhhXPreProcq*†q+…q,q-}q.(hh	]q/…q0Rq1h
hubhhXControlq2†q3…q4q5}q6(hh	]q7…q8Rq9h
hubhhXConstantq:†q;…q<q=}q>(hh	]q?…q@RqAh
hubhhX	NamespaceqB†qC…qDqE}qF(hh	]qG…qHRqIh
hubhhXPseudoqJ†qK…qLqM}qN(hh	]qO…qPRqQh
hubhhXDeclarationqR†qS…qTqU}qV(hh	]qW…qXRqYh
hubhe…qZRq[h
h)…q\q]}q^(hh	]q_(hXEscapeq`…qa…qbqc}qd(hh	]qe…qfRqgh
h]ubhXOperatorqh…qi…qjqk}ql(hh	]qm(hhhXDBSqn†qo…qpqq}qr(hh	]qs…qtRquh
hkubhhhh†qv…qwqx}qy(hh	]qz…q{Rq|h
hkube…q}Rq~h
h]hhxhnhqubhXNameq…q€…qq‚}qƒ(hh	]q„(hhXTagq…†q†…q‡qˆ}q‰(hh	]qŠ…q‹RqŒh
h‚ubhhXEntityq†qŽ…qq}q‘(hh	]q’hhhhn‡q“…q”q•}q–(hh	]q—…q˜Rq™h
huba…qšRq›h
h‚hnh•ubhhX	Exceptionqœ†q…qžqŸ}q (hh	]q¡…q¢Rq£h
h‚ubhhX	Decoratorq¤†q¥…q¦q§}q¨(hh	]q©…qªRq«h
h‚ubhhXClassq¬†q­…q®q¯}q°(hh	]q±(hhh¬hn‡q²…q³q´}qµ(hh	]q¶…q·Rq¸h
h¯ubhhh¬XStartq¹‡qº…q»q¼}q½(hh	]q¾…q¿RqÀh
h¯ube…qÁRqÂh
h‚h¹h¼hnh´ubhhXVariableqÆqąqŁqÆ}qÇ(hh	]qÈ(hhhÃX	AnonymousqɇqʅqˁqÌ}qÍ(hh	]q΅qÏRqÐh
hÆubhhhÃh¬‡qхqҁqÓ}qÔ(hh	]qՅqÖRq×h
hÆubhhhÃXMagicq؇qمqځqÛ}qÜ(hh	]q݅qÞRqßh
hÆubhhhÃXGlobalqà‡qá…qâqã}qä(hh	]qå…qæRqçh
hÆubhhhÃXInstanceqè‡qé…qêqë}qì(hh	]qí…qîRqïh
hÆube…qðRqñh
h‚h¬hÓhàhãhèhëhØhÛhÉhÌubhhX	Attributeqò†qó…qôqõ}qö(hh	]q÷hhhòhÇqø…qùqú}qû(hh	]qü…qýRqþh
hõuba…qÿRrh
h‚hÃhúubhhhB†r…rr}r(hh	]r…rRrh
h‚ubhhXPropertyr†r	…r
r}r(hh	]r
…rRrh
h‚ubhhXSymbolr†r…rr}r(hh	]r…rRrh
h‚ubhhXClassesr†r…rr}r(hh	]r…rRrh
h‚ubhhhJ†r …r!r"}r#(hh	]r$…r%Rr&h
h‚ubhhXLabelr'†r(…r)r*}r+(hh	]r,…r-Rr.h
h‚ubhhhh†r/…r0r1}r2(hh	]r3…r4Rr5h
h‚ubhhXBuiltinr6†r7…r8r9}r:(hh	]r;(hhj6hJ‡r<…r=r>}r?(hh	]r@…rARrBh
j9ubhhj6h"‡rC…rDrE}rF(hh	]rG…rHRrIh
j9ube…rJRrKh
h‚hJj>h"jEubhhXFieldrL†rM…rNrO}rP(hh	]rQ…rRRrSh
h‚ubhhXOtherrT†rU…rVrW}rX(hh	]rYhhjTXMemberrZ‡r[…r\r]}r^(hh	]r_…r`Rrah
jWuba…rbRrch
h‚jZj]ubhhXFunctionrd†re…rfrg}rh(hh	]rihhjdh؇rj…rkrl}rm(hh	]rn…roRrph
jguba…rqRrrh
h‚hØjlubhhh"†rs…rtru}rv(hh	]rw…rxRryh
h‚ubhhh:†rz…r{r|}r}(hh	]r~…rRr€h
h‚ube…rRr‚h
h]hòhõj6j9h¬h¯h:j|h¤h§hhhœhŸjdjgjjj'j*hBjjTjWh…hˆhÃhÆjLjOjjhJj"hhj1jjh"juubhXLiteralrƒ…r„…r…r†}r‡(hh	]rˆ(hjƒjT†r‰…rЁr‹}rŒ(hh	]r…rŽRrh
j†ubhjƒXCharr†r‘…r’r“}r”(hh	]r•…r–Rr—h
j†ubhjƒXDater˜†r™…ršr›}rœ(hh	]r…ržRrŸh
j†ubhjƒXScalarr †r¡…r¢r£}r¤(hh	]r¥hjƒj XPlainr¦‡r§…r¨r©}rª(hh	]r«…r¬Rr­h
j£uba…r®Rr¯h
j†j¦j©ubhjƒXStringr°†r±…r²r³}r´(hh	]rµ(hjƒj°XInterpolr¶‡r·…r¸r¹}rº(hh	]r»…r¼Rr½h
j³ubhjƒj°X	Delimeterr¾‡r¿…rÀrÁ}rÂ(hh	]rÃ…rÄRrÅh
j³ubhjƒj°j‡rÆ…rǁrÈ}rÉ(hh	]rÊ…rËRrÌh
j³ubhjƒj°j‡rÍ…r΁rÏ}rÐ(hh	]rÑ…rÒRrÓh
j³ubhjƒj°XSinglerÔ‡rÕ…rցr×}rØ(hh	]rÙ…rÚRrÛh
j³ubhjƒj°jT‡rÜ…r݁rÞ}rß(hh	]rà…ráRrâh
j³ubhjƒj°XBacktickrã‡rä…råræ}rç(hh	]rè…réRrêh
j³ubhjƒj°h`‡rë…rìrí}rî(hh	]rï…rðRrñh
j³ubhjƒj°XRegexrò‡ró…rôrõ}rö(hh	]r÷…røRrùh
j³ubhjƒj°XMomentrú‡rû…rürý}rþ(hh	]rÿ…rRrh
j³ubhjƒj°XBooleanr‡r…rr}r(hh	]r…rRr	h
j³ubhjƒj°X	Characterr
‡r…rr
}r(hh	]r…rRrh
j³ubhjƒj°X	Delimiterr‡r…rr}r(hh	]r…rRrh
j³ubhjƒj°XDocr‡r…rr}r(hh	]r…r Rr!h
j³ubhjƒj°h‡r"…r#r$}r%(hh	]r&…r'Rr(h
j³ubhjƒj°XAffixr)‡r*…r+r,}r-(hh	]r.…r/Rr0h
j³ubhjƒj°XHeredocr1‡r2…r3r4}r5(hh	]r6…r7Rr8h
j³ubhjƒj°XDoubler9‡r:…r;r<}r=(hh	]r>…r?Rr@h
j³ubhjƒj°XInterprA‡rB…rCrD}rE(hh	]rF…rGRrHh
j³ubhjƒj°XAtomrI‡rJ…rKrL}rM(hh	]rN…rORrPh
j³ube…rQRrRh
j†j)j,jãjæjjÈjjjjj9j<h`jíj1j4j¶j¹jTjÞjòjõjÔj×jjÏj
j
jújýjAjDjjj¾jÁjIjLhj$ubhjƒXNumberrS†rT…rUrV}rW(hh	]rX(hjƒjSXFloatrY‡rZ…r[r\}r](hh	]r^…r_Rr`h
jVubhjƒjSXDecra‡rb…rcrd}re(hh	]rf…rgRrhh
jVubhjƒjSXRadixri‡rj…rkrl}rm(hh	]rn…roRrph
jVubhjƒjSXOctrq‡rr…rsrt}ru(hh	]rv…rwRrxh
jVubhjƒjSXBinry‡rz…r{r|}r}(hh	]r~…rRr€h
jVubhjƒjShò‡r…r‚rƒ}r„(hh	]r……r†Rr‡h
jVubhjƒjSXHexrˆ‡r‰…rЁr‹}rŒ(hh	]r…rŽRrh
jVubhjƒjSXIntegerr‡r‘…r’r“}r”(hh	]r•h(jƒjSjXLongr–tr—…r˜r™}rš(hh	]r›…rœRrh
j“uba…ržRrŸh
jVj–j™ubhjƒjSXDecimalr ‡r¡…r¢r£}r¤(hh	]r¥…r¦Rr§h
jVube…r¨Rr©h
j†jyj|jYj\jˆj‹jj“jqjtjijlhòjƒj j£jajdube…rªRr«h
h]j°j³jSjVj˜j›j j£jTj‹jj“ubhXGenericr¬…r­…r®r¯}r°(hh	]r±(hj¬XErrorr²†r³…r´rµ}r¶(hh	]r·…r¸Rr¹h
j¯ubhj¬X
Subheadingrº†r»…r¼r½}r¾(hh	]r¿…rÀRrÁh
j¯ubhj¬X	Tracebackr†rÃ…rārÅ}rÆ(hh	]rÇ…rÈRrÉh
j¯ubhj¬XOutputrʆrË…ŕrÍ}rÎ(hh	]rÏ…rÐRrÑh
j¯ubhj¬XPromptrÒ†rÓ…rԁrÕ}rÖ(hh	]r×…rØRrÙh
j¯ubhj¬XDeletedrÚ†rÛ…r܁rÝ}rÞ(hh	]rß…ràRráh
j¯ubhj¬XInsertedrâ†rã…rärå}ræ(hh	]rç…rèRréh
j¯ubhj¬XHeadingrê†rë…rìrí}rî(hh	]rï…rðRrñh
j¯ubhj¬XStrongrò†ró…rôrõ}rö(hh	]r÷…røRrùh
j¯ubhj¬XEmphrú†rû…rürý}rþ(hh	]rÿ…rRrh
j¯ube…rRrh
h]jÚjÝjújýj²jµjêjíjâjåjÊjÍjÒjÕjòjõjºj½jÂjÅubhj²…r…rr}r(hh	]r…r	Rr
h
h]ubhhjT…r…rr
}r(hh	]r…rRrh
h]ubhXTextr…r…rr}r(hh	]r(hjXRootr†r…rr}r(hh	]r…rRrh
jubhjj†r …r!r"}r#(hh	]r$…r%Rr&h
jubhjXRagr'†r(…r)r*}r+(hh	]r,…r-Rr.h
jubhjX
Whitespacer/†r0…r1r2}r3(hh	]r4…r5Rr6h
jubhjXBeerr7†r8…r9r:}r;(hh	]r<…r=Rr>h
jubhjXPunctuationr?†r@…rArB}rC(hh	]rD…rERrFh
jube…rGRrHh
h]j/j2jj"j?jBjjj7j:j'j*ubhXCommentrI…rJ…rKrL}rM(hh	]rN(hjIXPreprocrO†rP…rQrR}rS(hh	]rT…rURrVh
jLubhjIXMultirW†rX…rYrZ}r[(hh	]r\…r]Rr^h
jLubhjIXHashbangr_†r`…rarb}rc(hh	]rd…reRrfh
jLubhjIjÔ†rg…rhri}rj(hh	]rk…rlRrmh
jLubhjIX
SingleLinern†ro…rprq}rr(hh	]rs…rtRruh
jLubhjIj†rv…rwrx}ry(hh	]rz…r{Rr|h
jLubhjIX	Directiver}†r~…rr€}r(hh	]r‚…rƒRr„h
jLubhjIX	Multiliner…†r†…r‡rˆ}r‰(hh	]rŠ…r‹RrŒh
jLubhjIX
Singleliner†rŽ…rr}r‘(hh	]r’…r“Rr”h
jLubhjIXPreprocFiler•†r–…r—r˜}r™(hh	]rš…r›Rrœh
jLubhjIXSpecialr†rž…rŸr }r¡(hh	]r¢…r£Rr¤h
jLube…r¥Rr¦h
h]j_jbj…jˆjOjRj•j˜jÔjijj j}j€jnjqjjxjWjZjjubhj?…r§…r¨r©}rª(hh	]r«hj?X	Indicatorr¬†r­…r®r¯}r°(hh	]r±…r²Rr³h
j©uba…r´Rrµh
h]j¬j¯ube…r¶Rr·jjh`hcj²jjTj
hhhh‚jƒj†j?j©hhhkjIjLj¬j¯XTokenr¸h]j°j³jSjVubh:h=hRhUhBhEhJhMhhh"h%h2h5hhh*h-hhububXIMPLEMENTATIONr¹†rºjX r»†r¼hXMODULEr½†r¾jj»†r¿h‚XSortingrÀ†rÁj©X;r†rÃjX

rĆrÅjˆX(* J. Andrea, Dec.16/91 *)rƆrÇjX
rȆrÉjˆXG(* This code may be freely used and distributed, it may not be sold. *)rʆrËjX

r̆rÍjˆX;(* Adapted to ISO Module-2 by Frank Schoonjans  Feb 2004 *)rΆrÏjX

rІrÑhXFROMrÒ†rÓjj»†rÔh‚XStoragerÕ†rÖjj»†r×hXIMPORTr؆rÙjj»†rÚh‚XALLOCATErÛ†rÜj©j†rÝjX

rÞ†rßhXCONSTrà†rájjȆrâjX   rã†räh‚X	max_stackrå†ræjj»†rçhkX=rè†réjj»†rêj“X20rë†rìj©j†ríjjȆrîjX   rï†rðh‚Xn_smallrñ†ròjX   ró†rôhkjè†rõjj»†röj“X6r÷†røj©j†rùjj»†rújˆX1(* use a simple sort for this size and smaller *)rû†rüjX

rý†rþhXVARrÿ†rjjȆrjX  r†rh‚Xrtempr†rjj»†rj©X:r†rj9XREALr	†r
j©j†rjjȆrjX  r
†rh‚Xctempr†rjj»†rj©j†rj9XCARDINALr†rj©j†rjX

r†rjX  r†rh‚XLr†rj©X,r†rjj»†rh‚XRr†r j©j†r!jj»†r"h‚Xnr#†r$jX               r%†r&j©j†r'j9XINTEGERr(†r)j©j†r*jjȆr+jX  r,†r-h‚Xtopr.†r/j©j†r0jj»†r1h‚Xbottomr2†r3j©j†r4jj»†r5h‚Xlastflipr6†r7jj»†r8j©j†r9j9XINTEGERr:†r;j©j†r<jX

r=†r>jX  r?†r@h‚XtosrA†rBjX            rC†rDj©j†rEj9XCARDINALrF†rGj©j†rHjjȆrIjX  rJ†rKh‚XLstackrL†rMj©j†rNjj»†rOh‚XRstackrP†rQjj»†rRj©j†rShXARRAYrT†rUjj»†rVj©X[rW†rXj“X1rY†rZj©X..r[†r\h‚X	max_stackr]†r^j©X]r_†r`jj»†rahXOFrb†rcjj»†rdj9XINTEGERre†rfj©j†rgjX

rh†rijX      rj†rkjˆX9(* --------------------------------------------------- *)rl†rmjjȆrnjX      ro†rphX	PROCEDURErq†rrjj»†rsh‚XCardQSortIndexrt†ruj©X(rv†rwjj»†rxh‚Xxry†rzjj»†r{j©j†r|hXARRAYr}†r~jj»†rhXOFr€†rjj»†r‚j9XCARDINALrƒ†r„j©j†r…jj»†r†h‚X	array_lenr‡†rˆjj»†r‰j©j†rŠj9XCARDINALr‹†rŒj©j†rjjȆrŽjX                                 r†rhXVARr‘†r’jj»†r“h‚Xindexr”†r•jj»†r–j©j†r—hXARRAYr˜†r™jj»†ršhXOFr›†rœjj»†rj9XCARDINALrž†rŸjj»†r j©X)r¡†r¢j©j†r£jX

r¤†r¥jX      r¦†r§hXVARr¨†r©jjȆrªjX        r«†r¬h‚Xmedianr­†r®jj»†r¯j©j†r°jj»†r±j9XCARDINALr²†r³j©j†r´jjȆrµjX        r¶†r·h‚Xir¸†r¹j©j†rºh‚Xjr»†r¼jX    r½†r¾j©j†r¿jj»†rÀj9XINTEGERrÁ†rÂj©j†rÃjjȆrÄjX      rņrÆhXBEGINrdžrÈjX

rɆrÊjX        rˆrÌh‚j#†rÍjj»†rÎhkX:=rφrÐjj»†rÑj9XVALrÒ†rÓj©jv†rÔj9XINTEGERrÕ†rÖj©j†r×h‚X	array_lenr؆rÙj©j¡†rÚjj»†rÛhkX-r܆rÝjj»†rÞj“jY†rßj©j†ràjj»†rájˆX(* back to zero offset *)râ†rãjX

rä†råjX        ræ†rçjˆX(* initialize the index *)rè†réjjȆrêjX        rë†rìhXFORrí†rîjj»†rïh‚j¸†rðjj»†rñhkX:=rò†rójj»†rôj“X0rõ†röjj»†r÷hXTOrø†rùjj»†rúh‚j#†rûjj»†rühXDOrý†rþjjȆrÿjX
          r†rh‚Xindexr†rj©jW†rh‚j¸†rj©j_†rjj»†rhkX:=r†r	jj»†r
j9XVALr†rj©jv†r
j9XCARDINALr†rj©j†rh‚j¸†rj©j¡†rj©j†rjjȆrjX        r†rhXENDr†rj©j†rjX

r†rjX        r†rh‚Xtosr†rjj»†r hkX:=r!†r"jj»†r#j“jõ†r$j©j†r%jX

r&†r'jX        r(†r)h‚j†r*jj»†r+hkX:=r,†r-jj»†r.j“jõ†r/j©j†r0jX  r1†r2h‚j†r3jj»†r4hkX:=r5†r6jj»†r7h‚j#†r8j©j†r9jX

r:†r;jX        r<†r=jˆX(* PUSH very first set *)r>†r?jjȆr@jX        rA†rBh‚XtosrC†rDjj»†rEhkX:=rF†rGjj»†rHh‚XtosrI†rJjj»†rKhkX+rL†rMjj»†rNj“jY†rOj©j†rPjX  rQ†rRh‚XLstackrS†rTj©jW†rUh‚XtosrV†rWj©j_†rXjj»†rYhkX:=rZ†r[jj»†r\h‚j†r]j©j†r^jX  r_†r`h‚XRstackra†rbj©jW†rch‚Xtosrd†rej©j_†rfjj»†rghkX:=rh†rijj»†rjh‚j†rkj©j†rljX

rm†rnjX        ro†rphXREPEATrq†rrjX

rs†rtjX
          ru†rvjˆX	(* POP *)rw†rxjjȆryjX
          rz†r{h‚j†r|jj»†r}hkX:=r~†rjj»†r€h‚XLstackr†r‚j©jW†rƒh‚Xtosr„†r…j©j_†r†j©j†r‡jX  rˆ†r‰h‚j†rŠjj»†r‹hkX:=rŒ†rjj»†rŽh‚XRstackr†rj©jW†r‘h‚Xtosr’†r“j©j_†r”j©j†r•jX  r–†r—h‚Xtosr˜†r™jj»†ršhkX:=r›†rœjj»†rh‚Xtosrž†rŸjj»†r hkj܆r¡jj»†r¢j“jY†r£j©j†r¤jX

r¥†r¦jX
          r§†r¨hXIFr©†rªjj»†r«h‚j†r¬jj»†r­hkj܆r®jj»†r¯h‚j†r°jj»†r±hkjL†r²jj»†r³j“jY†r´jj»†rµhkX>r¶†r·jj»†r¸h‚Xn_smallr¹†rºjj»†r»hXTHENr¼†r½jX

r¾†r¿jX            rÀ†rÁhXREPEATr†rÃjjȆrÄjX              rņrÆh‚j¸†rÇjj»†rÈhkX:=rɆrÊjj»†rËh‚j†rÌj©j†rÍjX  rΆrÏh‚j»†rÐjj»†rÑhkX:=rÒ†rÓjj»†rÔh‚j†rÕj©j†rÖjX    r׆rØh‚XmedianrÙ†rÚjj»†rÛhkX:=r܆rÝjj»†rÞh‚jy†rßj©jW†ràh‚Xindexrá†râj©jW†rãj©jv†räjj»†råh‚j†ræjj»†rçhkjL†rèjj»†réh‚j†rêjj»†rëj©j¡†rìjj»†ríhXDIVrî†rïjj»†rðj“X2rñ†ròj©j_†rój©j_†rôj©j†rõjX

rö†r÷jX              rø†rùhXREPEATrú†rûjjȆrüjX                rý†rþhXWHILErÿ†rjj»†rh‚jy†rj©jW†rh‚Xindexr†rj©jW†rh‚j¸†rj©j_†rj©j_†r	jj»†r
hkX<r†rjj»†r
h‚Xmedianr†rjj»†rhXDOr†rjjȆrjX                  r†rh‚j¸†rjj»†rhkX:=r†rjj»†rh‚j¸†rjj»†rhkjL†rjj»†rj“jY†rj©j†r jjȆr!jX                r"†r#hXENDr$†r%j©j†r&jjȆr'jX                r(†r)hXWHILEr*†r+jj»†r,h‚Xmedianr-†r.jj»†r/hkj†r0jj»†r1h‚jy†r2j©jW†r3h‚Xindexr4†r5j©jW†r6h‚j»†r7j©j_†r8j©j_†r9jj»†r:hXDOr;†r<jjȆr=jX                  r>†r?h‚j»†r@jj»†rAhkX:=rB†rCjj»†rDh‚j»†rEjj»†rFhkj܆rGjj»†rHj“jY†rIj©j†rJjjȆrKjX                rL†rMhXENDrN†rOj©j†rPjX

rQ†rRjX                rS†rThXIFrU†rVjj»†rWh‚j¸†rXjj»†rYhkX<=rZ†r[jj»†r\h‚j»†r]jj»†r^hXTHENr_†r`jj»†rajˆX
(* swap *)rb†rcjjȆrdjX                  re†rfh‚Xctemprg†rhjj»†rihkX:=rj†rkjj»†rlh‚Xindexrm†rnj©jW†roh‚j¸†rpj©j_†rqj©j†rrjX  rs†rth‚Xindexru†rvj©jW†rwh‚j¸†rxj©j_†ryjj»†rzhkX:=r{†r|jj»†r}h‚Xindexr~†rj©jW†r€h‚j»†rj©j_†r‚j©j†rƒjX  r„†r…h‚Xindexr††r‡j©jW†rˆh‚j»†r‰j©j_†rŠjj»†r‹hkX:=rŒ†rjj»†rŽh‚Xctempr†rj©j†r‘jjȆr’jX                  r“†r”h‚j¸†r•jj»†r–hkX:=r—†r˜jj»†r™h‚j¸†ršjj»†r›hkjL†rœjj»†rj“jY†ržj©j†rŸjX  r †r¡h‚j»†r¢jj»†r£hkX:=r¤†r¥jj»†r¦h‚j»†r§jj»†r¨hkj܆r©jj»†rªj“jY†r«j©j†r¬jjȆr­jX                r®†r¯hXENDr°†r±j©j†r²jjȆr³jX              r´†rµhXUNTILr¶†r·jj»†r¸h‚j¸†r¹jj»†rºhkj¶†r»jj»†r¼h‚j»†r½j©j†r¾jX

r¿†rÀjX              rÁ†rÂhXIFrÆrÄjj»†rÅh‚j»†rÆjj»†rÇhkj܆rÈjj»†rÉh‚j†rÊjj»†rËhkj†rÌjj»†rÍh‚j†rÎjj»†rÏhkj܆rÐjj»†rÑh‚j¸†rÒjj»†rÓhXTHENrÔ†rÕjjȆrÖjX                r׆rØhXIFrÙ†rÚjj»†rÛh‚j¸†rÜjj»†rÝhkj†rÞjj»†rßh‚j†ràjj»†ráhXTHENrâ†rãjj»†räjˆX
(* PUSH *)rå†ræjjȆrçjX                  rè†réh‚Xtosrê†rëjj»†rìhkX:=rí†rîjj»†rïh‚Xtosrð†rñjj»†ròhkjL†rójj»†rôj“jY†rõj©j†röjX  r÷†røh‚XLstackrù†rúj©jW†rûh‚Xtosrü†rýj©j_†rþjj»†rÿhkX:=r†rjj»†rh‚j¸†rj©j†rjX  r†rh‚XRstackr†rj©jW†r	h‚Xtosr
†rj©j_†rjj»†r
hkX:=r†rjj»†rh‚j†rj©j†rjjȆrjX                r†rhXENDr†rj©j†rjjȆrjX                r†rh‚j†rjj»†rhkX:=r†rjj»†r h‚j»†r!j©j†r"jjȆr#jX              r$†r%hXELSEr&†r'jjȆr(jX                r)†r*hXIFr+†r,jj»†r-h‚j†r.jj»†r/hkj†r0jj»†r1h‚j»†r2jj»†r3hXTHENr4†r5jj»†r6jˆX
(* push *)r7†r8jjȆr9jX                  r:†r;h‚Xtosr<†r=jj»†r>hkX:=r?†r@jj»†rAh‚XtosrB†rCjj»†rDhkjL†rEjj»†rFj“jY†rGj©j†rHjX  rI†rJh‚XLstackrK†rLj©jW†rMh‚XtosrN†rOj©j_†rPjj»†rQhkX:=rR†rSjj»†rTh‚j†rUj©j†rVjX  rW†rXh‚XRstackrY†rZj©jW†r[h‚Xtosr\†r]j©j_†r^jj»†r_hkX:=r`†rajj»†rbh‚j»†rcj©j†rdjjȆrejX                rf†rghXENDrh†rij©j†rjjjȆrkjX                rl†rmh‚j†rnjj»†rohkX:=rp†rqjj»†rrh‚j¸†rsj©j†rtjjȆrujX              rv†rwhXENDrx†ryj©j†rzjX

r{†r|jX            r}†r~hXUNTILr†r€jj»†rh‚j†r‚jj»†rƒhkX>=r„†r…jj»†r†h‚j†r‡j©j†rˆjX

r‰†rŠjX	         r‹†rŒhXELSEr†rŽjX

r†rjX           r‘†r’jˆX+(* small sort for small number of values *)r“†r”jjȆr•jX           r–†r—hXFORr˜†r™jj»†ršh‚j¸†r›jj»†rœhkX:=r†ržjj»†rŸh‚j†r jj»†r¡hXTOr¢†r£jj»†r¤h‚j†r¥jj»†r¦hkj܆r§jj»†r¨j“jY†r©jj»†rªhXDOr«†r¬jjȆr­jX
             r®†r¯hXFORr°†r±jj»†r²h‚j»†r³jj»†r´hkX:=rµ†r¶jj»†r·h‚j¸†r¸jj»†r¹hXTOrº†r»jj»†r¼h‚j†r½jj»†r¾hXDOr¿†rÀjjȆrÁjX               r†rÃhXIFrĆrÅjj»†rÆh‚jy†rÇj©jW†rÈh‚XindexrɆrÊj©jW†rËh‚j¸†rÌj©j_†rÍj©j_†rÎjj»†rÏhkj¶†rÐjj»†rÑh‚jy†rÒj©jW†rÓh‚XindexrÔ†rÕj©jW†rÖh‚j»†r×j©j_†rØj©j_†rÙjj»†rÚhXTHENrÛ†rÜjjȆrÝjX                  rÞ†rßh‚Xctemprà†rájX    râ†rãhkX:=rä†råjj»†ræh‚Xindexrç†rèj©jW†réh‚j¸†rêj©j_†rëj©j†rìjjȆríjX                  rî†rïh‚Xindexrð†rñj©jW†ròh‚j¸†rój©j_†rôjj»†rõhkX:=rö†r÷jj»†røh‚Xindexrù†rúj©jW†rûh‚j»†rüj©j_†rýj©j†rþjjȆrÿjX                  r†rh‚Xindexr†rj©jW†rh‚j»†rj©j_†rjj»†rhkX:=r†r	jj»†r
h‚Xctempr†rjjȆr
jX               r†rhXENDr†rj©j†rjjȆrjX
             r†rhXENDr†rj©j†rjjȆrjX           r†rhXENDr†rj©j†rjX

r†r jX	         r!†r"hXENDr#†r$j©j†r%jj»†r&jˆX(* check for small *)r'†r(jX

r)†r*jX       r+†r,hXUNTILr-†r.jj»†r/h‚Xtosr0†r1jj»†r2hkjè†r3jj»†r4j“jõ†r5j©j†r6jX

r7†r8jX      r9†r:hXENDr;†r<jj»†r=h‚XCardQSortIndexr>†r?j©j†r@jX

rA†rBjX      rC†rDjˆX9(* --------------------------------------------------- *)rE†rFjjȆrGjX      rH†rIhX	PROCEDURErJ†rKjj»†rLh‚XRealQSortIndexrM†rNj©jv†rOjj»†rPh‚jy†rQjj»†rRj©j†rShXARRAYrT†rUjj»†rVhXOFrW†rXjj»†rYj9XREALrZ†r[j©j†r\jj»†r]h‚X	array_lenr^†r_jj»†r`j©j†raj9XCARDINALrb†rcj©j†rdjjȆrejX                                 rf†rghXVARrh†rijj»†rjh‚Xindexrk†rljj»†rmj©j†rnhXARRAYro†rpjj»†rqhXOFrr†rsjj»†rtj9XCARDINALru†rvjj»†rwj©j¡†rxj©j†ryjX

rz†r{jX      r|†r}hXVARr~†rjjȆr€jX        r†r‚h‚Xmedianrƒ†r„jj»†r…j©j†r†j9XREALr‡†rˆj©j†r‰jjȆrŠjX        r‹†rŒh‚j¸†rj©j†rŽh‚j»†rjX    r†r‘j©j†r’j9XINTEGERr“†r”j©j†r•jjȆr–jX      r—†r˜hXBEGINr™†ršjX

r›†rœjX        r†ržh‚j#†rŸjj»†r hkX:=r¡†r¢jj»†r£j9XVALr¤†r¥j©jv†r¦j9XINTEGERr§†r¨j©j†r©h‚X	array_lenrª†r«j©j¡†r¬jj»†r­hkj܆r®jj»†r¯j“jY†r°j©j†r±jj»†r²jˆX(* back to zero offset *)r³†r´jX

rµ†r¶jX        r·†r¸jˆX(* initialize the index *)r¹†rºjjȆr»jX        r¼†r½hXFORr¾†r¿jj»†rÀh‚j¸†rÁjj»†rÂhkX:=rÆrÄjj»†rÅj“jõ†rÆjj»†rÇhXTOrȆrÉjj»†rÊh‚j#†rËjj»†rÌhXDOr͆rÎjjȆrÏjX
          rІrÑh‚XindexrÒ†rÓj©jW†rÔh‚j¸†rÕj©j_†rÖjj»†r×hkX:=r؆rÙjj»†rÚj9XVALrÛ†rÜj©jv†rÝj9XCARDINALrÞ†rßj©j†ràh‚j¸†ráj©j¡†râj©j†rãjjȆräjX        rå†ræhXENDrç†rèj©j†réjX

rê†rëjX        rì†ríh‚Xtosrî†rïjj»†rðhkX:=rñ†ròjj»†rój“jõ†rôj©j†rõjX

rö†r÷jX        rø†rùh‚j†rújj»†rûhkX:=rü†rýjj»†rþj“jõ†rÿj©j†r	jX  r	†r	h‚j†r	jj»†r	hkX:=r	†r	jj»†r	h‚j#†r	j©j†r		jX

r
	†r	jX        r	†r
	jˆX(* PUSH very first set *)r	†r	jjȆr	jX        r	†r	h‚Xtosr	†r	jj»†r	hkX:=r	†r	jj»†r	h‚Xtosr	†r	jj»†r	hkjL†r	jj»†r	j“jY†r	j©j†r	jX  r 	†r!	h‚XLstackr"	†r#	j©jW†r$	h‚Xtosr%	†r&	j©j_†r'	jj»†r(	hkX:=r)	†r*	jj»†r+	h‚j†r,	j©j†r-	jX  r.	†r/	h‚XRstackr0	†r1	j©jW†r2	h‚Xtosr3	†r4	j©j_†r5	jj»†r6	hkX:=r7	†r8	jj»†r9	h‚j†r:	e(j©j†r;	jX

r<	†r=	jX        r>	†r?	hXREPEATr@	†rA	jX

rB	†rC	jX
          rD	†rE	jˆX	(* POP *)rF	†rG	jjȆrH	jX
          rI	†rJ	h‚j†rK	jj»†rL	hkX:=rM	†rN	jj»†rO	h‚XLstackrP	†rQ	j©jW†rR	h‚XtosrS	†rT	j©j_†rU	j©j†rV	jX  rW	†rX	h‚j†rY	jj»†rZ	hkX:=r[	†r\	jj»†r]	h‚XRstackr^	†r_	j©jW†r`	h‚Xtosra	†rb	j©j_†rc	j©j†rd	jX  re	†rf	h‚Xtosrg	†rh	jj»†ri	hkX:=rj	†rk	jj»†rl	h‚Xtosrm	†rn	jj»†ro	hkj܆rp	jj»†rq	j“jY†rr	j©j†rs	jX

rt	†ru	jX
          rv	†rw	hXIFrx	†ry	jj»†rz	h‚j†r{	jj»†r|	hkj܆r}	jj»†r~	h‚j†r	jj»†r€	hkjL†r	jj»†r‚	j“jY†rƒ	jj»†r„	hkj¶†r…	jj»†r†	h‚Xn_smallr‡	†rˆ	jj»†r‰	hXTHENrŠ	†r‹	jX

rŒ	†r	jX            rŽ	†r	hXREPEATr	†r‘	jjȆr’	jX              r“	†r”	h‚j¸†r•	jj»†r–	hkX:=r—	†r˜	jj»†r™	h‚j†rš	j©j†r›	jX  rœ	†r	h‚j»†rž	jj»†rŸ	hkX:=r 	†r¡	jj»†r¢	h‚j†r£	j©j†r¤	jX    r¥	†r¦	h‚Xmedianr§	†r¨	jj»†r©	hkX:=rª	†r«	jj»†r¬	h‚jy†r­	j©jW†r®	h‚Xindexr¯	†r°	j©jW†r±	j©jv†r²	jj»†r³	h‚j†r´	jj»†rµ	hkjL†r¶	jj»†r·	h‚j†r¸	jj»†r¹	j©j¡†rº	jj»†r»	hXDIVr¼	†r½	jj»†r¾	j“jñ†r¿	j©j_†rÀ	j©j_†rÁ	j©j†rÂ	jX

rÃ	†rÄ	jX              rÅ	†rÆ	hXREPEATrÇ	†rÈ	jjȆrÉ	jX                rÊ	†rË	hXWHILErÌ	†rÍ	jj»†rÎ	h‚jy†rÏ	j©jW†rÐ	h‚XindexrÑ	†rÒ	j©jW†rÓ	h‚j¸†rÔ	j©j_†rÕ	j©j_†rÖ	jj»†r×	hkj†rØ	jj»†rÙ	h‚XmedianrÚ	†rÛ	jj»†rÜ	hXDOrÝ	†rÞ	jjȆrß	jX                  rà	†rá	h‚j¸†râ	jj»†rã	hkX:=rä	†rå	jj»†ræ	h‚j¸†rç	jj»†rè	hkjL†ré	jj»†rê	j“jY†rë	j©j†rì	jjȆrí	jX                rî	†rï	hXENDrð	†rñ	j©j†rò	jjȆró	jX                rô	†rõ	hXWHILErö	†r÷	jj»†rø	h‚Xmedianrù	†rú	jj»†rû	hkj†rü	jj»†rý	h‚jy†rþ	j©jW†rÿ	h‚Xindexr
†r
j©jW†r
h‚j»†r
j©j_†r
j©j_†r
jjȠr
hXDOr
†r
jjȆr	
jX                  r

†r
h‚j»†r
jjȠr
hkX:=r
†r
jjȠr
h‚j»†r
jjȠr
hkj܆r
jjȠr
j“jY†r
j©j†r
jjȆr
jX                r
†r
hXENDr
†r
j©j†r
jX

r
†r
jX                r
†r 
hXIFr!
†r"
jjȠr#
h‚j¸†r$
jjȠr%
hkX<=r&
†r'
jjȠr(
h‚j»†r)
jjȠr*
hXTHENr+
†r,
jjȠr-
jˆX
(* swap *)r.
†r/
jjȆr0
jX                  r1
†r2
h‚Xctempr3
†r4
jjȠr5
hkX:=r6
†r7
jjȠr8
h‚Xindexr9
†r:
j©jW†r;
h‚j¸†r<
j©j_†r=
j©j†r>
jX  r?
†r@
h‚XindexrA
†rB
j©jW†rC
h‚j¸†rD
j©j_†rE
jjȠrF
hkX:=rG
†rH
jjȠrI
h‚XindexrJ
†rK
j©jW†rL
h‚j»†rM
j©j_†rN
j©j†rO
jX  rP
†rQ
h‚XindexrR
†rS
j©jW†rT
h‚j»†rU
j©j_†rV
jjȠrW
hkX:=rX
†rY
jjȠrZ
h‚Xctempr[
†r\
j©j†r]
jjȆr^
jX                  r_
†r`
h‚j¸†ra
jjȠrb
hkX:=rc
†rd
jjȠre
h‚j¸†rf
jjȠrg
hkjL†rh
jjȠri
j“jY†rj
j©j†rk
jX  rl
†rm
h‚j»†rn
jjȠro
hkX:=rp
†rq
jjȠrr
h‚j»†rs
jjȠrt
hkj܆ru
jjȠrv
j“jY†rw
j©j†rx
jjȆry
jX                rz
†r{
hXENDr|
†r}
j©j†r~
jjȆr
jX              r€
†r
hXUNTILr‚
†rƒ
jj»†r„
h‚j¸†r…
jj»†r†
hkj¶†r‡
jj»†rˆ
h‚j»†r‰
j©j†rŠ
jX

r‹
†rŒ
jX              r
†rŽ
hXIFr
†r
jj»†r‘
h‚j»†r’
jj»†r“
hkj܆r”
jj»†r•
h‚j†r–
jj»†r—
hkj†r˜
jj»†r™
h‚j†rš
jj»†r›
hkj܆rœ
jj»†r
h‚j¸†rž
jj»†rŸ
hXTHENr 
†r¡
jjȆr¢
jX                r£
†r¤
hXIFr¥
†r¦
jj»†r§
h‚j¸†r¨
jj»†r©
hkj†rª
jj»†r«
h‚j†r¬
jj»†r­
hXTHENr®
†r¯
jj»†r°
jˆX
(* PUSH *)r±
†r²
jjȆr³
jX                  r´
†rµ
h‚Xtosr¶
†r·
jj»†r¸
hkX:=r¹
†rº
jj»†r»
h‚Xtosr¼
†r½
jj»†r¾
hkjL†r¿
jj»†rÀ
j“jY†rÁ
j©j†rÂ
jX  rÃ
†rÄ
h‚XLstackrÅ
†rÆ
j©jW†rÇ
h‚XtosrÈ
†rÉ
j©j_†rÊ
jj»†rË
hkX:=rÌ
†rÍ
jj»†rÎ
h‚j¸†rÏ
j©j†rÐ
jX  rÑ
†rÒ
h‚XRstackrÓ
†rÔ
j©jW†rÕ
h‚XtosrÖ
†r×
j©j_†rØ
jj»†rÙ
hkX:=rÚ
†rÛ
jj»†rÜ
h‚j†rÝ
j©j†rÞ
jjȆrß
jX                rà
†rá
hXENDrâ
†rã
j©j†rä
jjȆrå
jX                ræ
†rç
h‚j†rè
jj»†ré
hkX:=rê
†rë
jj»†rì
h‚j»†rí
j©j†rî
jjȆrï
jX              rð
†rñ
hXELSErò
†ró
jjȆrô
jX                rõ
†rö
hXIFr÷
†rø
jj»†rù
h‚j†rú
jj»†rû
hkj†rü
jj»†rý
h‚j»†rþ
jj»†rÿ
hXTHENr†rjj»†rjˆX
(* push *)r†rjjȆrjX                  r†rh‚Xtosr†r	jj»†r
hkX:=r†rjj»†r
h‚Xtosr†rjj»†rhkjL†rjj»†rj“jY†rj©j†rjX  r†rh‚XLstackr†rj©jW†rh‚Xtosr†rj©j_†rjj»†rhkX:=r†rjj»†r h‚j†r!j©j†r"jX  r#†r$h‚XRstackr%†r&j©jW†r'h‚Xtosr(†r)j©j_†r*jj»†r+hkX:=r,†r-jj»†r.h‚j»†r/j©j†r0jjȆr1jX                r2†r3hXENDr4†r5j©j†r6jjȆr7jX                r8†r9h‚j†r:jj»†r;hkX:=r<†r=jj»†r>h‚j¸†r?j©j†r@jjȆrAjX              rB†rChXENDrD†rEj©j†rFjX

rG†rHjX            rI†rJhXUNTILrK†rLjj»†rMh‚j†rNjj»†rOhkX>=rP†rQjj»†rRh‚j†rSj©j†rTjX

rU†rVjX	         rW†rXhXELSErY†rZjX

r[†r\jX           r]†r^jˆX+(* small sort for small number of values *)r_†r`jjȆrajX           rb†rchXFORrd†rejj»†rfh‚j¸†rgjj»†rhhkX:=ri†rjjj»†rkh‚j†rljj»†rmhXTOrn†rojj»†rph‚j†rqjj»†rrhkj܆rsjj»†rtj“jY†rujj»†rvhXDOrw†rxjjȆryjX
             rz†r{hXFORr|†r}jj»†r~h‚j»†rjj»†r€hkX:=r†r‚jj»†rƒh‚j¸†r„jj»†r…hXTOr††r‡jj»†rˆh‚j†r‰jj»†rŠhXDOr‹†rŒjjȆrjX               rކrhXIFr†r‘jj»†r’h‚jy†r“j©jW†r”h‚Xindexr•†r–j©jW†r—h‚j¸†r˜j©j_†r™j©j_†ršjj»†r›hkj¶†rœjj»†rh‚jy†ržj©jW†rŸh‚Xindexr †r¡j©jW†r¢h‚j»†r£j©j_†r¤j©j_†r¥jj»†r¦hXTHENr§†r¨jjȆr©jX                  rª†r«h‚Xctempr¬†r­jX    r®†r¯hkX:=r°†r±jj»†r²h‚Xindexr³†r´j©jW†rµh‚j¸†r¶j©j_†r·j©j†r¸jjȆr¹jX                  rº†r»h‚Xindexr¼†r½j©jW†r¾h‚j¸†r¿j©j_†rÀjj»†rÁhkX:=r†rÃjj»†rÄh‚XindexrņrÆj©jW†rÇh‚j»†rÈj©j_†rÉj©j†rÊjjȆrËjX                  r̆rÍh‚XindexrΆrÏj©jW†rÐh‚j»†rÑj©j_†rÒjj»†rÓhkX:=rÔ†rÕjj»†rÖh‚Xctempr׆rØjjȆrÙjX               rÚ†rÛhXENDr܆rÝj©j†rÞjjȆrßjX
             rà†ráhXENDrâ†rãj©j†räjjȆråjX           ræ†rçhXENDrè†réj©j†rêjX

rë†rìjX	         rí†rîhXENDrï†rðj©j†rñjj»†ròjˆX(* check for small *)ró†rôjX

rõ†röjX       r÷†røhXUNTILrù†rújj»†rûh‚Xtosrü†rýjj»†rþhkjè†rÿjj»†rj“jõ†rj©j†rjX

r†rjX      r†rhXENDr†rjj»†r	h‚XRealQSortIndexr
†rj©j†rjX

r
†rjX      r†rjˆX9(* --------------------------------------------------- *)r†rjjȆrjX      r†rhX	PROCEDUREr†rjj»†rh‚X	CardQSortr†rj©jv†rjj»†rhXVARr†rjj»†rh‚jy†r jj»†r!j©j†r"hXARRAYr#†r$jj»†r%hXOFr&†r'jj»†r(j9XCARDINALr)†r*j©j†r+jj»†r,h‚X	array_lenr-†r.jj»†r/j©j†r0j9XCARDINALr1†r2jj»†r3j©j¡†r4j©j†r5jX

r6†r7jX      r8†r9hXVARr:†r;jjȆr<jX        r=†r>h‚Xmedianr?†r@jj»†rAj©j†rBjj»†rCj9XCARDINALrD†rEj©j†rFjjȆrGjX        rH†rIh‚j#†rJj©j†rKh‚j¸†rLj©j†rMh‚j»†rNjX  rO†rPj©j†rQjj»†rRj9XINTEGERrS†rTj©j†rUjjȆrVjX      rW†rXhXBEGINrY†rZjX

r[†r\jX        r]†r^h‚j#†r_jj»†r`hkX:=ra†rbjj»†rcj9XVALrd†rej©jv†rfj9XINTEGERrg†rhj©j†rih‚X	array_lenrj†rkj©j¡†rljj»†rmhkj܆rnjj»†roj“jY†rpj©j†rqjj»†rrjˆX(* back to zero offset *)rs†rtjX

ru†rvjX        rw†rxh‚Xtosry†rzjj»†r{hkX:=r|†r}jj»†r~j“jõ†rj©j†r€jX

r†r‚jX        rƒ†r„h‚j†r…jj»†r†hkX:=r‡†rˆjj»†r‰j“jõ†rŠj©j†r‹jX  rŒ†rh‚j†rŽjj»†rhkX:=r†r‘jj»†r’h‚j#†r“j©j†r”jX

r•†r–jX        r—†r˜jˆX(* PUSH very first set *)r™†ršjjȆr›jX        rœ†rh‚Xtosrž†rŸjj»†r hkX:=r¡†r¢jj»†r£h‚Xtosr¤†r¥jj»†r¦hkjL†r§jj»†r¨j“jY†r©j©j†rªjX  r«†r¬h‚XLstackr­†r®j©jW†r¯h‚Xtosr°†r±j©j_†r²jj»†r³hkX:=r´†rµjj»†r¶h‚j†r·j©j†r¸jX  r¹†rºh‚XRstackr»†r¼j©jW†r½h‚Xtosr¾†r¿j©j_†rÀjj»†rÁhkX:=rÂ†rÃjj»†rÄh‚j†rÅj©j†rÆjX

rÇ†rÈjX        rÉ†rÊhXREPEATrË†rÌjX

rÍ†rÎjX
          rÏ†rÐjˆX	(* POP *)rÑ†rÒjjȆrÓjX
          rÔ†rÕh‚j†rÖjj»†r×hkX:=rØ†rÙjj»†rÚh‚XLstackrÛ†rÜj©jW†rÝh‚XtosrÞ†rßj©j_†ràj©j†rájX  râ†rãh‚j†räjj»†råhkX:=ræ†rçjj»†rèh‚XRstackré†rêj©jW†rëh‚Xtosrì†ríj©j_†rîj©j†rïjX  rð†rñh‚Xtosrò†rójj»†rôhkX:=rõ†röjj»†r÷h‚Xtosrø†rùjj»†rúhkj܆rûjj»†rüj“jY†rýj©j†rþjX

rÿ†r
jX
          r
†r
hXIFr
†r
jjȠr
h‚j†r
jjȠr
hkj܆r
jjȠr	
h‚j†r

jjȠr
hkjL†r
jjȠr

j“jY†r
jjȠr
hkj¶†r
jjȠr
h‚Xn_smallr
†r
jjȠr
hXTHENr
†r
jX

r
†r
jX            r
†r
hXREPEATr
†r
jjȆr
jX              r
†r
h‚j¸†r 
jjȠr!
hkX:=r"
†r#
jjȠr$
h‚j†r%
j©j†r&
jX  r'
†r(
h‚j»†r)
jjȠr*
hkX:=r+
†r,
jjȠr-
h‚j†r.
j©j†r/
jX    r0
†r1
h‚Xmedianr2
†r3
jjȠr4
hkX:=r5
†r6
jjȠr7
h‚jy†r8
j©jW†r9
j©jv†r:
jjȠr;
h‚j†r<
jjȠr=
hkjL†r>
jjȠr?
h‚j†r@
jjȠrA
j©j¡†rB
jjȠrC
hXDIVrD
†rE
jjȠrF
j“jñ†rG
j©j_†rH
j©j†rI
jX

rJ
†rK
jX              rL
†rM
hXREPEATrN
†rO
jjȆrP
jX                rQ
†rR
hXWHILErS
†rT
jjȠrU
h‚jy†rV
j©jW†rW
h‚j¸†rX
j©j_†rY
jjȠrZ
hkj†r[
jjȠr\
h‚Xmedianr]
†r^
jjȠr_
hXDOr`
†ra
jjȆrb
jX                  rc
†rd
h‚j¸†re
jjȠrf
hkX:=rg
†rh
jjȠri
h‚j¸†rj
jjȠrk
hkjL†rl
jjȠrm
j“jY†rn
j©j†ro
jjȆrp
jX                rq
†rr
hXENDrs
†rt
j©j†ru
jjȆrv
jX                rw
†rx
hXWHILEry
†rz
jjȠr{
h‚Xmedianr|
†r}
jjȠr~
hkj†r
jj»†r€
h‚jy†r
j©jW†r‚
h‚j»†rƒ
j©j_†r„
jj»†r…
hXDOr†
†r‡
jjȆrˆ
jX                  r‰
†rŠ
h‚j»†r‹
jj»†rŒ
hkX:=r
†rŽ
jj»†r
h‚j»†r
jj»†r‘
hkj܆r’
jj»†r“
j“jY†r”
j©j†r•
jjȆr–
jX                r—
†r˜
hXENDr™
†rš
j©j†r›
jX

rœ
†r
jX                rž
†rŸ
hXIFr 
†r¡
jj»†r¢
h‚j¸†r£
jj»†r¤
hkX<=r¥
†r¦
jj»†r§
h‚j»†r¨
jj»†r©
hXTHENrª
†r«
jj»†r¬
jˆX
(* swap *)r­
†r®
jjȆr¯
jX                  r°
†r±
h‚Xctempr²
†r³
jj»†r´
hkX:=rµ
†r¶
jj»†r·
h‚jy†r¸
j©jW†r¹
h‚j¸†rº
j©j_†r»
j©j†r¼
jX  r½
†r¾
h‚jy†r¿
j©jW†rÀ
h‚j¸†rÁ
j©j_†rÂ
jj»†rÃ
hkX:=rÄ
†rÅ
jj»†rÆ
h‚jy†rÇ
j©jW†rÈ
h‚j»†rÉ
j©j_†rÊ
j©j†rË
jX  rÌ
†rÍ
h‚jy†rÎ
j©jW†rÏ
h‚j»†rÐ
j©j_†rÑ
jj»†rÒ
hkX:=rÓ
†rÔ
jj»†rÕ
h‚XctemprÖ
†r×
j©j†rØ
jjȆrÙ
jX                  rÚ
†rÛ
h‚j¸†rÜ
jj»†rÝ
hkX:=rÞ
†rß
jj»†rà
h‚j¸†rá
jj»†râ
hkjL†rã
jj»†rä
j“jY†rå
j©j†ræ
jX  rç
†rè
h‚j»†ré
jj»†rê
hkX:=rë
†rì
jj»†rí
h‚j»†rî
jj»†rï
hkj܆rð
jj»†rñ
j“jY†rò
j©j†ró
jjȆrô
jX                rõ
†rö
hXENDr÷
†rø
j©j†rù
jjȆrú
jX              rû
†rü
hXUNTILrý
†rþ
jj»†rÿ
h‚j¸†rjj»†rhkj¶†rjj»†rh‚j»†rj©j†rjX

r†rjX              r†r	hXIFr
†rjj»†rh‚j»†r
jj»†rhkj܆rjj»†rh‚j†rjj»†rhkj†rjj»†rh‚j†rjj»†rhkj܆rjj»†rh‚j¸†rjj»†rhXTHENr†rjjȆrjX                r†rhXIFr †r!jj»†r"h‚j¸†r#jj»†r$hkj†r%jj»†r&h‚j†r'jj»†r(hXTHENr)†r*jj»†r+jˆX
(* PUSH *)r,†r-jjȆr.jX                  r/†r0h‚Xtosr1†r2jj»†r3hkX:=r4†r5jj»†r6h‚Xtosr7†r8jj»†r9hkjL†r:jj»†r;j“jY†r<j©j†r=jX  r>†r?h‚XLstackr@†rAj©jW†rBh‚XtosrC†rDj©j_†rEjj»†rFhkX:=rG†rHjj»†rIh‚j¸†rJj©j†rKjX  rL†rMh‚XRstackrN†rOj©jW†rPh‚XtosrQ†rRj©j_†rSjj»†rThkX:=rU†rVjj»†rWh‚j†rXj©j†rYjjȆrZjX                r[†r\hXENDr]†r^j©j†r_jjȆr`jX                ra†rbh‚j†rcjj»†rdhkX:=re†rfjj»†rgh‚j»†rhj©j†rijjȆrjjX              rk†rlhXELSErm†rnjjȆrojX                rp†rqhXIFrr†rsjj»†rth‚j†rujj»†rvhkj†rwjj»†rxh‚j»†rye(jj»†rzhXTHENr{†r|jj»†r}jˆX
(* push *)r~†rjjȆr€jX                  r†r‚h‚Xtosrƒ†r„jj»†r…hkX:=r††r‡jj»†rˆh‚Xtosr‰†rŠjj»†r‹hkjL†rŒjj»†rj“jY†rŽj©j†rjX  r†r‘h‚XLstackr’†r“j©jW†r”h‚Xtosr•†r–j©j_†r—jj»†r˜hkX:=r™†ršjj»†r›h‚j†rœj©j†rjX  rž†rŸh‚XRstackr †r¡j©jW†r¢h‚Xtosr£†r¤j©j_†r¥jj»†r¦hkX:=r§†r¨jj»†r©h‚j»†rªj©j†r«jjȆr¬jX                r­†r®hXENDr¯†r°j©j†r±jjȆr²jX                r³†r´h‚j†rµjj»†r¶hkX:=r·†r¸jj»†r¹h‚j¸†rºj©j†r»jjȆr¼jX              r½†r¾hXENDr¿†rÀj©j†rÁjX

r†rÃjX            rĆrÅhXUNTILrƆrÇjj»†rÈh‚j†rÉjj»†rÊhkX>=rˆrÌjj»†rÍh‚j†rÎj©j†rÏjX

rІrÑjX	         rÒ†rÓhXELSErÔ†rÕjX

rÖ†r×jX           r؆rÙjˆX+(* small sort for small number of values *)rÚ†rÛjjȆrÜjX           r݆rÞhXFORr߆ràjj»†ráh‚j¸†râjj»†rãhkX:=rä†råjj»†ræh‚j†rçjj»†rèhXTOré†rêjj»†rëh‚j†rìjj»†ríhkj܆rîjj»†rïj“jY†rðjj»†rñhXDOrò†rójjȆrôjX
             rõ†röhXFORr÷†røjj»†rùh‚j»†rújj»†rûhkX:=rü†rýjj»†rþh‚j¸†rÿjj»†rhXTOr†rjj»†rh‚j†rjj»†rhXDOr†rjjȆrjX               r	†r
hXIFr†rjj»†r
h‚jy†rj©jW†rh‚j¸†rj©j_†rjj»†rhkj¶†rjj»†rh‚jy†rj©jW†rh‚j»†rj©j_†rjj»†rhXTHENr†rjjȆrjX                  r†rh‚Xctempr†r jj»†r!hkX:=r"†r#jj»†r$h‚jy†r%j©jW†r&h‚j¸†r'j©j_†r(j©j†r)jjȆr*jX                  r+†r,h‚jy†r-j©jW†r.h‚j¸†r/j©j_†r0jX  r1†r2hkX:=r3†r4jj»†r5h‚jy†r6j©jW†r7h‚j»†r8j©j_†r9j©j†r:jjȆr;jX                  r<†r=h‚jy†r>j©jW†r?h‚j»†r@j©j_†rAjX  rB†rChkX:=rD†rEjj»†rFh‚XctemprG†rHjjȆrIjX               rJ†rKhXENDrL†rMj©j†rNjjȆrOjX
             rP†rQhXENDrR†rSj©j†rTjjȆrUjX           rV†rWhXENDrX†rYj©j†rZjX

r[†r\jX	         r]†r^hXENDr_†r`j©j†rajj»†rbjˆX(* check for small *)rc†rdjX

re†rfjX       rg†rhhXUNTILri†rjjj»†rkh‚Xtosrl†rmjj»†rnhkjè†rojj»†rpj“jõ†rqj©j†rrjX

rs†rtjX      ru†rvhXENDrw†rxjj»†ryh‚X	CardQSortrz†r{j©j†r|jX

r}†r~jX      r†r€jˆX;(* ----------------------------------------------------- *)r†r‚jjȆrƒjX      r„†r…hX	PROCEDUREr††r‡jj»†rˆh‚X	CardBSortr‰†rŠj©jv†r‹jj»†rŒhXVARr†rŽjj»†rh‚jy†rjj»†r‘j©j†r’hXARRAYr“†r”jj»†r•hXOFr–†r—jj»†r˜j9XCARDINALr™†ršj©j†r›jj»†rœh‚X	array_lenr†ržjj»†rŸj©j†r j9XCARDINALr¡†r¢jj»†r£j©j¡†r¤j©j†r¥jjȆr¦jX      r§†r¨hXVARr©†rªjj»†r«h‚j¸†r¬j©j†r­h‚j»†r®jj»†r¯j©j†r°jj»†r±j9XINTEGERr²†r³j©j†r´jjȆrµjX      r¶†r·hXBEGINr¸†r¹jjȆrºjX        r»†r¼h‚Xtopr½†r¾jX    r¿†rÀhkX:=rÁ†rÂjj»†rÃj“jõ†rÄj©j†rÅjX      rƆrÇjˆX!(* open arrays are zero offset *)rȆrÉjjȆrÊjX        rˆrÌh‚Xbottomr͆rÎjj»†rÏhkX:=rІrÑjj»†rÒj9XVALrÓ†rÔj©jv†rÕj9XINTEGERrÖ†r×j©j†rØh‚X	array_lenrÙ†rÚj©j¡†rÛjj»†rÜhkj܆rÝjj»†rÞj“jY†rßj©j†ràjX

rá†râjX        rã†rähXWHILErå†ræjj»†rçh‚Xtoprè†réjj»†rêhkj†rëjj»†rìh‚Xbottomrí†rîjj»†rïhXDOrð†rñjX

rò†rójX
          rô†rõh‚Xlastfliprö†r÷jj»†røhkX:=rù†rújj»†rûh‚Xtoprü†rýj©j†rþjX

rÿ†rjX
          r†rhXFORr†rjj»†rh‚j¸†rjj»†rhkX:=r†r	jj»†r
h‚Xtopr†rjj»†r
hXTOr†rjj»†rh‚Xbottomr†rhkj܆rj“jY†rjj»†rhXDOr†rjjȆrjX
             r†rhXIFr†rjj»†rh‚jy†rj©jW†rh‚j¸†r j©j_†r!jj»†r"hkj¶†r#jj»†r$h‚jy†r%j©jW†r&h‚j¸†r'hkjL†r(j“jY†r)j©j_†r*jj»†r+hXTHENr,†r-jX    r.†r/jˆX
(* flip *)r0†r1jjȆr2jX               r3†r4h‚Xctempr5†r6jX  r7†r8hkX:=r9†r:jj»†r;h‚jy†r<j©jW†r=h‚j¸†r>j©j_†r?j©j†r@jjȆrAjX               rB†rCh‚jy†rDj©jW†rEh‚j¸†rFj©j_†rGjX   rH†rIhkX:=rJ†rKjj»†rLh‚jy†rMj©jW†rNh‚j¸†rOhkjL†rPj“jY†rQj©j_†rRj©j†rSjjȆrTjX               rU†rVh‚jy†rWj©jW†rXh‚j¸†rYhkjL†rZj“jY†r[j©j_†r\jj»†r]hkX:=r^†r_jj»†r`h‚Xctempra†rbj©j†rcjjȆrdjX               re†rfh‚Xlastfliprg†rhjj»†rihkX:=rj†rkjj»†rlh‚j¸†rmj©j†rnjjȆrojX
             rp†rqhXENDrr†rsj©j†rtjjȆrujX
          rv†rwhXENDrx†ryj©j†rzjX

r{†r|jX
          r}†r~h‚Xbottomr†r€jj»†rhkX:=r‚†rƒjj»†r„h‚Xlastflipr…†r†j©j†r‡jX

rˆ†r‰jX
          rІr‹hXIFrŒ†rjj»†rŽh‚Xbottomr†rjj»†r‘hkj¶†r’jj»†r“h‚Xtopr”†r•jj»†r–hXTHENr—†r˜jX

r™†ršjX
             r›†rœh‚j¸†rjj»†ržhkX:=rŸ†r jj»†r¡h‚Xbottomr¢†r£jj»†r¤hkj܆r¥jj»†r¦j“jY†r§j©j†r¨jjȆr©jX
             rª†r«hXFORr¬†r­jj»†r®h‚j»†r¯jj»†r°hkX:=r±†r²jj»†r³h‚Xtopr´†rµjj»†r¶hXTOr·†r¸jj»†r¹h‚Xbottomrº†r»hkj܆r¼j“jY†r½jj»†r¾hXDOr¿†rÀjjȆrÁjX               r†rÃhXIFrĆrÅjj»†rÆh‚jy†rÇj©jW†rÈh‚j¸†rÉj©j_†rÊjj»†rËhkj¶†rÌjj»†rÍh‚jy†rÎj©jW†rÏh‚j¸†rÐhkjL†rÑj“jY†rÒj©j_†rÓjj»†rÔhXTHENrÕ†rÖjX    r׆rØjˆX
(* flip *)rÙ†rÚjjȆrÛjX                 r܆rÝh‚XctemprÞ†rßjX  rà†ráhkX:=râ†rãjj»†räh‚jy†råj©jW†ræh‚j¸†rçj©j_†rèj©j†réjjȆrêjX                 rë†rìh‚jy†ríj©jW†rîh‚j¸†rïj©j_†rðjX   rñ†ròhkX:=ró†rôjj»†rõh‚jy†röj©jW†r÷h‚j¸†røhkjL†rùj“jY†rúj©j_†rûj©j†rüjjȆrýjX                 rþ†rÿh‚jy†rj©jW†rh‚j¸†rhkjL†rj“jY†rj©j_†rjj»†rhkX:=r†rjj»†r	h‚Xctempr
†rj©j†rjjȆr
jX                 r†rh‚Xlastflipr†rjj»†rhkX:=r†rjj»†rh‚j¸†rj©j†rjjȆrjX               r†rhXENDr†rj©j†rjjȆrjX               r†r h‚j¸†r!jj»†r"hkX:=r#†r$jj»†r%h‚j¸†r&jj»†r'hkj܆r(jj»†r)j“jY†r*j©j†r+jjȆr,jX
             r-†r.hXENDr/†r0j©j†r1jX

r2†r3jX
             r4†r5h‚Xtopr6†r7jj»†r8hkX:=r9†r:jj»†r;h‚Xlastflipr<†r=jj»†r>hkjL†r?jj»†r@j“jY†rAj©j†rBjX

rC†rDjX
          rE†rFhXELSErG†rHjjȆrIjX
             rJ†rKjˆX(* force a loop failure *)rL†rMjjȆrNjX
             rO†rPh‚XtoprQ†rRjj»†rShkX:=rT†rUjj»†rVh‚XbottomrW†rXjj»†rYhkjL†rZjj»†r[j“jY†r\j©j†r]jjȆr^jX
          r_†r`hXENDra†rbj©j†rcjX

rd†rejX       rf†rghXENDrh†rij©j†rjjX

rk†rljX      rm†rnhXENDro†rpjj»†rqh‚X	CardBSortrr†rsj©j†rtjX


ru†rvjX      rw†rxjˆX;(* ----------------------------------------------------- *)ry†rzjjȆr{jX      r|†r}hX	PROCEDUREr~†rjj»†r€h‚X	RealBSortr†r‚j©jv†rƒjj»†r„hXVARr…†r†jj»†r‡h‚jy†rˆjj»†r‰j©j†rŠhXARRAYr‹†rŒjj»†rhXOFrކrjj»†rj9XREALr‘†r’j©j†r“jj»†r”h‚X	array_lenr•†r–jj»†r—j©j†r˜j9XCARDINALr™†ršjj»†r›j©j¡†rœj©j†rjjȆržjX      rŸ†r hXVARr¡†r¢jj»†r£h‚Xbottomr¤†r¥j©j†r¦h‚Xtopr§†r¨jj»†r©j©j†rªjj»†r«j9XINTEGERr¬†r­j©j†r®jjȆr¯jX
          r°†r±h‚j¸†r²j©j†r³h‚j»†r´jX        rµ†r¶j©j†r·jj»†r¸j9XINTEGERr¹†rºj©j†r»jjȆr¼jX      r½†r¾hXBEGINr¿†rÀjjȆrÁjX        r†rÃh‚XtoprĆrÅjX    rƆrÇhkX:=rȆrÉjj»†rÊj“jõ†rËj©j†rÌjX      r͆rÎjˆX!(* open arrays are zero offset *)rφrÐjjȆrÑjX        rÒ†rÓh‚XbottomrÔ†rÕjj»†rÖhkX:=r׆rØjj»†rÙj9XVALrÚ†rÛj©jv†rÜj9XINTEGERr݆rÞj©j†rßh‚X	array_lenrà†ráj©j¡†râjj»†rãhkj܆räjj»†råj“jY†ræj©j†rçjX

rè†réjX        rê†rëhXWHILErì†ríjj»†rîh‚Xtoprï†rðjj»†rñhkj†ròjj»†róh‚Xbottomrô†rõjj»†röhXDOr÷†røjX

rù†rújX
          rû†rüh‚Xlastfliprý†rþjj»†rÿhkX:=r†rjj»†rh‚Xtopr†rj©j†rjX

r†rjX
          r†r	hXFORr
†rjj»†rh‚j¸†r
jj»†rhkX:=r†rjj»†rh‚Xtopr†rjj»†rhXTOr†rjj»†rh‚Xbottomr†rhkj܆rj“jY†rjj»†rhXDOr†rjjȆrjX
             r †r!hXIFr"†r#jj»†r$h‚jy†r%j©jW†r&h‚j¸†r'j©j_†r(jj»†r)hkj¶†r*jj»†r+h‚jy†r,j©jW†r-h‚j¸†r.hkjL†r/j“jY†r0j©j_†r1jj»†r2hXTHENr3†r4jX    r5†r6jˆX
(* flip *)r7†r8jjȆr9jX               r:†r;h‚Xrtempr<†r=jX  r>†r?hkX:=r@†rAjj»†rBh‚jy†rCj©jW†rDh‚j¸†rEj©j_†rFj©j†rGjjȆrHjX               rI†rJh‚jy†rKj©jW†rLh‚j¸†rMj©j_†rNjX   rO†rPhkX:=rQ†rRjj»†rSh‚jy†rTj©jW†rUh‚j¸†rVhkjL†rWj“jY†rXj©j_†rYj©j†rZjjȆr[jX               r\†r]h‚jy†r^j©jW†r_h‚j¸†r`hkjL†raj“jY†rbj©j_†rcjj»†rdhkX:=re†rfjj»†rgh‚Xrtemprh†rij©j†rjjjȆrkjX               rl†rmh‚Xlastfliprn†rojj»†rphkX:=rq†rrjj»†rsh‚j¸†rtj©j†rujjȆrvjX
             rw†rxhXENDry†rzj©j†r{jjȆr|jX
          r}†r~hXENDr†r€j©j†rjX

r‚†rƒjX
          r„†r…h‚Xbottomr††r‡jj»†rˆhkX:=r‰†rŠjj»†r‹h‚XlastfliprŒ†rj©j†rŽjX

r†rjX
          r‘†r’hXIFr“†r”jj»†r•h‚Xbottomr–†r—jj»†r˜hkj¶†r™jj»†ršh‚Xtopr›†rœjj»†rhXTHENrž†rŸjX

r †r¡jX
             r¢†r£h‚j¸†r¤jj»†r¥hkX:=r¦†r§jj»†r¨h‚Xbottomr©†rªjj»†r«hkj܆r¬jj»†r­j“jY†r®j©j†r¯jjȆr°jX
             r±†r²hXFORr³†r´jj»†rµh‚j»†r¶jj»†r·hkX:=r¸†r¹jj»†rºh‚Xtopr»†r¼jj»†r½hXTOr¾†r¿jj»†rÀh‚XbottomrÁ†rÂhkj܆rÃj“jY†rÄjj»†rÅhXDOrƆrÇjjȆrÈjX               rɆrÊhXIFrˆrÌjj»†rÍh‚jy†rÎj©jW†rÏh‚j¸†rÐj©j_†rÑjj»†rÒhkj¶†rÓjj»†rÔh‚jy†rÕj©jW†rÖh‚j¸†r×hkjL†rØj“jY†rÙj©j_†rÚjj»†rÛhXTHENr܆rÝjX    rÞ†rßjˆX
(* flip *)rà†rájjȆrâjX                 rã†räh‚Xrtemprå†ræjX  rç†rèhkX:=ré†rêjj»†rëh‚jy†rìj©jW†ríh‚j¸†rîj©j_†rïj©j†rðjjȆrñjX                 rò†róh‚jy†rôj©jW†rõh‚j¸†röj©j_†r÷jX   rø†rùhkX:=rú†rûjj»†rüh‚jy†rýj©jW†rþh‚j¸†rÿhkjL†rj“jY†rj©j_†rj©j†rjjȆrjX                 r†rh‚jy†rj©jW†rh‚j¸†r	hkjL†r
j“jY†rj©j_†rjj»†r
hkX:=r†rjj»†rh‚Xrtempr†rj©j†rjjȆrjX                 r†rh‚Xlastflipr†rjj»†rhkX:=r†rjj»†rh‚j¸†rj©j†rjjȆrjX               r †r!hXENDr"†r#j©j†r$jjȆr%jX               r&†r'h‚j¸†r(jj»†r)hkX:=r*†r+jj»†r,h‚j¸†r-jj»†r.hkj܆r/jj»†r0j“jY†r1j©j†r2jjȆr3jX
             r4†r5hXENDr6†r7j©j†r8jX

r9†r:jX
             r;†r<h‚Xtopr=†r>jj»†r?hkX:=r@†rAjj»†rBh‚XlastfliprC†rDjj»†rEhkjL†rFjj»†rGj“jY†rHj©j†rIjX

rJ†rKjX
          rL†rMhXELSErN†rOjjȆrPjX
             rQ†rRjˆX(* force a loop failure *)rS†rTjjȆrUjX
             rV†rWh‚XtoprX†rYjj»†rZhkX:=r[†r\jj»†r]h‚Xbottomr^†r_jj»†r`hkjL†rajj»†rbj“jY†rcj©j†rdjjȆrejX
          rf†rghXENDrh†rij©j†rjjX

rk†rljX       rm†rnhXENDro†rpj©j†rqjX

rr†rsjX      rt†ruhXENDrv†rwjj»†rxh‚X	RealBSortry†rzj©j†r{jX


r|†r}jX    r~†rjˆX;(* ----------------------------------------------------- *)r€†rjjȆr‚jX    rƒ†r„hX	PROCEDUREr…†r†jj»†r‡h‚XTopoSortrˆ†r‰j©jv†rŠjj»†r‹h‚jy†rŒj©j†rjj»†rŽh‚Xyr†rjj»†r‘j©j†r’hXARRAYr“†r”jj»†r•hXOFr–†r—jj»†r˜j9XCARDINALr™†ršj©j†r›jj»†rœh‚Xn_pairsr†ržjj»†rŸj©j†r j9XCARDINALr¡†r¢j©j†r£jjȆr¤jX                       r¥†r¦hXVARr§†r¨jj»†r©h‚Xsolutionrª†r«jj»†r¬j©j†r­hXARRAYr®†r¯jj»†r°hXOFr±†r²jj»†r³j9XCARDINALr´†rµj©j†r¶jj»†r·hXVARr¸†r¹jj»†rºh‚X
n_solutionr»†r¼jj»†r½j©j†r¾j9XCARDINALr¿†rÀj©j†rÁjjȆrÂjX                       rÆrÄhXVARrņrÆjj»†rÇh‚XerrorrȆrÉj©j†rÊjj»†rËh‚Xsortedr̆rÍjj»†rÎj©j†rÏj9XBOOLEANrІrÑjj»†rÒj©j¡†rÓj©j†rÔjjȆrÕjX    rÖ†r×jˆX€(*
     This procedure needs some garbage collection added, i've tried but
     will little success. J. Andrea, Dec.18/91
    *)r؆rÙjX

rÚ†rÛjX    r܆rÝhXTYPErÞ†rßjjȆràjX      rá†râh‚XLPtrrã†räe(jj»†råhkjè†ræjj»†rçhXPOINTERrè†réjj»†rêhXTOrë†rìjj»†ríh‚XLeaderrî†rïj©j†rðjjȆrñjX      rò†róh‚XTPtrrô†rõjj»†röhkjè†r÷jj»†røhXPOINTERrù†rújj»†rûhXTOrü†rýjj»†rþh‚XTrailerrÿ†rj©j†rjX

r†rjX      r†rh‚XLeaderr†rjj»†rhkjè†r	jj»†r
hXRECORDr†rjjȆr
jX                  r†rh‚Xkeyr†rjX   r†rj©j†rj9XCARDINALr†rj©j†rjjȆrjX                  r†rh‚Xcountr†rjj»†rj©j†rj9XINTEGERr†r j©j†r!jjȆr"jX                  r#†r$h‚Xtrailr%†r&jj»†r'j©j†r(h‚XTPtrr)†r*j©j†r+jjȆr,jX                  r-†r.h‚Xnextr/†r0jX  r1†r2j©j†r3h‚XLPtrr4†r5j©j†r6jjȆr7jX               r8†r9hXENDr:†r;j©j†r<jX

r=†r>jX      r?†r@h‚XTrailerrA†rBjj»†rChkjè†rDjj»†rEhXRECORDrF†rGjjȆrHjX                  rI†rJh‚XidrK†rLjX   rM†rNj©j†rOh‚XLPtrrP†rQj©j†rRjjȆrSjX                  rT†rUh‚XnextrV†rWjj»†rXj©j†rYh‚XTPtrrZ†r[j©j†r\jjȆr]jX                r^†r_hXENDr`†raj©j†rbjX

rc†rdjX    re†rfhXVARrg†rhjjȆrijX      rj†rkh‚Xprl†rmj©j†rnjj»†roh‚Xqrp†rqj©j†rrjj»†rsh‚Xheadrt†ruj©j†rvjj»†rwh‚Xtailrx†ryjj»†rzj©j†r{h‚XLPtrr|†r}j©j†r~jjȆrjX      r€†rh‚Xtr‚†rƒjX                r„†r…j©j†r†h‚XTPtrr‡†rˆj©j†r‰jjȆrŠjX      r‹†rŒh‚j¸†rj©j†rŽjj»†rh‚X
max_solutionsr†r‘jj»†r’j©j†r“j9XCARDINALr”†r•j©j†r–jX

r—†r˜jX      r™†ršjˆX2(* -------------------------------------------- *)r›†rœjjȆrjX      rž†rŸhX	PROCEDUREr †r¡jj»†r¢h‚XFindr£†r¤j©jv†r¥jj»†r¦h‚Xwr§†r¨jj»†r©j©j†rªj9XCARDINALr«†r¬jj»†r­j©j¡†r®jj»†r¯j©j†r°h‚XLPtrr±†r²j©j†r³jjȆr´jX      rµ†r¶hXVARr·†r¸jj»†r¹h‚Xhrº†r»jj»†r¼j©j†r½h‚XLPtrr¾†r¿j©j†rÀjjȆrÁjX      r†rÃhXBEGINrĆrÅjjȆrÆjX        rdžrÈh‚jº†rÉjj»†rÊhkX:=rˆrÌjj»†rÍh‚XheadrΆrÏj©j†rÐjX   rцrÒh‚XtailrÓ†rÔhkX^rÕ†rÖj©X.r׆rØh‚XkeyrÙ†rÚjj»†rÛhkX:=r܆rÝjj»†rÞh‚j§†rßj©j†ràjX  rá†râjˆX(* sentinel *)rã†räjjȆråjX        ræ†rçhXWHILErè†réjj»†rêh‚jº†rëhkjÕ†rìj©j׆ríh‚Xkeyrî†rïjj»†rðhkX#rñ†ròjj»†róh‚j§†rôjj»†rõhXDOrö†r÷jjȆrøjX           rù†rúh‚jº†rûjj»†rühkX:=rý†rþjj»†rÿh‚jº†rhkjÕ†rj©j׆rh‚Xnextr†rj©j†rjjȆrjX        r†rhXENDr	†r
j©j†rjjȆrjX        r
†rhXIFr†rjj»†rh‚jº†rjj»†rhkjè†rjj»†rh‚Xtailr†rjj»†rhXTHENr†rjjȆrjX
          r†rhXNEWr†rj©jv†r jj»†r!h‚Xtailr"†r#jj»†r$j©j¡†r%j©j†r&jjȆr'jX
          r(†r)h‚j#†r*jj»†r+hkX:=r,†r-jj»†r.h‚j#†r/jj»†r0hkjL†r1jj»†r2j“jY†r3j©j†r4jjȆr5jX
          r6†r7h‚jº†r8hkjÕ†r9j©j׆r:h‚Xcountr;†r<jj»†r=hkX:=r>†r?jj»†r@j“jõ†rAj©j†rBjjȆrCjX
          rD†rEh‚jº†rFhkjÕ†rGj©j׆rHh‚XtrailrI†rJjj»†rKhkX:=rL†rMjj»†rNj9XNILrO†rPj©j†rQjjȆrRjX
          rS†rTh‚jº†rUhkjÕ†rVj©j׆rWh‚XnextrX†rYjX  rZ†r[hkX:=r\†r]jj»†r^h‚Xtailr_†r`j©j†rajjȆrbjX        rc†rdhXENDre†rfj©j†rgjjȆrhjX        ri†rjhXRETURNrk†rljj»†rmh‚jº†rnj©j†rojjȆrpjX      rq†rrhXENDrs†rtjj»†ruh‚XFindrv†rwj©j†rxjX

ry†rzjX    r{†r|hXBEGINr}†r~jX

r†r€jX        r†r‚h‚Xerrorrƒ†r„jX      r…†r†hkX:=r‡†rˆjj»†r‰j9XFALSErІr‹j©j†rŒjjȆrjX        rކrh‚X
n_solutionr†r‘jj»†r’hkX:=r“†r”jj»†r•j“jõ†r–j©j†r—jX

r˜†r™jX        rš†r›hXIFrœ†rjj»†ržh‚Xn_pairsrŸ†r jj»†r¡hkj†r¢jj»†r£j“jñ†r¤jj»†r¥hXTHENr¦†r§jjȆr¨jX
          r©†rªh‚Xerrorr«†r¬jj»†r­hkX:=r®†r¯jj»†r°j9XTRUEr±†r²j©j†r³jjȆr´jX        rµ†r¶hXELSEr·†r¸jX

r¹†rºjX
          r»†r¼h‚X
max_solutionsr½†r¾jj»†r¿hkX:=rÀ†rÁjj»†rÂj9XHIGHrÆrÄj©jv†rÅjj»†rÆh‚XsolutionrdžrÈjj»†rÉj©j¡†rÊjj»†rËhkjL†rÌjj»†rÍj“jY†rÎj©j†rÏjX

rІrÑjX
          rÒ†rÓhXNEWrÔ†rÕj©jv†rÖjj»†r×h‚Xheadr؆rÙjj»†rÚj©j¡†rÛj©j†rÜjX  r݆rÞh‚Xtailr߆ràjj»†ráhkX:=râ†rãjj»†räh‚Xheadrå†ræj©j†rçjX  rè†réh‚j#†rêjj»†rëhkX:=rì†ríjj»†rîj“jõ†rïj©j†rðjX

rñ†ròjX
          ró†rôjˆX (* add all of the given pairs *)rõ†röjX

r÷†røjX
          rù†rúhXFORrû†rüjj»†rýh‚j¸†rþjj»†rÿhkX:=r†rjj»†rj“jõ†rjj»†rhXTOr†rjj»†rh‚Xn_pairsr†r	jj»†r
hkj܆rjj»†rj“jY†r
jj»†rhXDOr†rjjȆrjX            r†rh‚jl†rjj»†rhkX:=r†rjj»†rh‚XFindr†rj©jv†rjj»†rh‚jy†rj©jW†rh‚j¸†rj©j_†r jj»†r!j©j¡†r"j©j†r#jX   r$†r%h‚jp†r&jj»†r'hkX:=r(†r)jj»†r*h‚XFindr+†r,j©jv†r-jj»†r.h‚j†r/j©jW†r0h‚j¸†r1j©j_†r2jj»†r3j©j¡†r4j©j†r5jjȆr6jX            r7†r8hXNEWr9†r:j©jv†r;h‚j‚†r<j©j¡†r=j©j†r>jjȆr?jX            r@†rAh‚j‚†rBhkjÕ†rCj©j׆rDh‚XidrE†rFjX    rG†rHhkX:=rI†rJjj»†rKh‚jp†rLj©j†rMjjȆrNjX            rO†rPh‚j‚†rQhkjÕ†rRj©j׆rSh‚XnextrT†rUjX  rV†rWhkX:=rX†rYjj»†rZh‚jl†r[hkjÕ†r\j©j׆r]h‚Xtrailr^†r_j©j†r`jjȆrajX            rb†rch‚jl†rdhkjÕ†rej©j׆rfh‚Xtrailrg†rhjj»†rihkX:=rj†rkjj»†rlh‚j‚†rmj©j†rnjjȆrojX            rp†rqh‚jp†rrhkjÕ†rsj©j׆rth‚Xcountru†rvjj»†rwhkX:=rx†ryjj»†rzh‚jp†r{hkjÕ†r|j©j׆r}h‚Xcountr~†rjj»†r€hkjL†rjj»†r‚j“jY†rƒj©j†r„jjȆr…jX
          r††r‡hXENDrˆ†r‰j©j†rŠjX

r‹†rŒjX
          r†rŽjˆX-(* search for leaders without predecessors *)r†rjX

r‘†r’jX           r“†r”h‚jl†r•jj»†r–hkX:=r—†r˜jj»†r™h‚Xheadrš†r›j©j†rœjX  r†ržh‚XheadrŸ†r jj»†r¡hkX:=r¢†r£jj»†r¤j9XNILr¥†r¦j©j†r§jjȆr¨jX           r©†rªhXWHILEr«†r¬jj»†r­h‚jl†r®jj»†r¯hkjñ†r°jj»†r±h‚Xtailr²†r³jj»†r´hXDOrµ†r¶jjȆr·jX            r¸†r¹h‚jp†rºjj»†r»hkX:=r¼†r½jj»†r¾h‚jl†r¿j©j†rÀjX  rÁ†rÂh‚jl†rÃjj»†rÄhkX:=rņrÆjj»†rÇh‚jp†rÈhkjÕ†rÉj©j׆rÊh‚XnextrˆrÌj©j†rÍjjȆrÎjX            rφrÐhXIFrцrÒjj»†rÓh‚jp†rÔhkjÕ†rÕj©j׆rÖh‚Xcountr׆rØjj»†rÙhkjè†rÚjj»†rÛj“jõ†rÜjj»†rÝhXTHENrÞ†rßjjȆràjX              rá†râjˆX(* insert q^ in new chain *)rã†räjjȆråjX              ræ†rçh‚jp†rèhkjÕ†réj©j׆rêh‚Xnextrë†rìjj»†ríhkX:=rî†rïjj»†rðh‚Xheadrñ†ròj©j†rójX   rô†rõh‚Xheadrö†r÷jj»†røhkX:=rù†rújj»†rûh‚jp†rüj©j†rýjjȆrþjX            rÿ†rhXENDr†rj©j†rjjȆrjX
          r†rhXENDr†rj©j†r	jX

r
†rjX
          r†r
jˆX(* output phase *)r†rjX

r†rjX
          r†rh‚jp†rjj»†rhkX:=r†rjj»†rh‚Xheadr†rj©j†rjjȆrjX
          r†rhXWHILEr†r jj»†r!j©jv†r"jj»†r#hXNOTr$†r%jj»†r&h‚Xerrorr'†r(jj»†r)j©j¡†r*jj»†r+hkX&r,†r-jj»†r.j©jv†r/jj»†r0h‚jp†r1jj»†r2hkjñ†r3jj»†r4j9XNILr5†r6jj»†r7j©j¡†r8jj»†r9hXDOr:†r;jjȆr<jX            r=†r>h‚X
n_solutionr?†r@jj»†rAhkX:=rB†rCjj»†rDh‚X
n_solutionrE†rFjj»†rGhkjL†rHjj»†rIj“jY†rJj©j†rKjjȆrLjX            rM†rNhXIFrO†rPjj»†rQh‚X
n_solutionrR†rSjj»†rThkj¶†rUjj»†rVh‚X
max_solutionsrW†rXjj»†rYhXTHENrZ†r[jjȆr\jX              r]†r^h‚Xerrorr_†r`jj»†rahkX:=rb†rcjj»†rdj9XTRUEre†rfj©j†rgjjȆrhjX            ri†rjhXELSErk†rljX

rm†rnjX              ro†rph‚Xsolutionrq†rrj©jW†rsh‚X
n_solutionrt†ruhkj܆rvj“jY†rwj©j_†rxjj»†ryhkX:=rz†r{jj»†r|h‚jp†r}hkjÕ†r~j©j׆rh‚Xkeyr€†rj©j†r‚jjȆrƒjX              r„†r…h‚j#†r†jj»†r‡hkX:=rˆ†r‰jj»†rŠh‚j#†r‹jj»†rŒhkj܆rjj»†rŽj“jY†rj©j†rjjȆr‘jX              r’†r“h‚j‚†r”jj»†r•hkX:=r–†r—jj»†r˜h‚jp†r™hkjÕ†ršj©j׆r›h‚Xtrailrœ†rj©j†ržjX  rŸ†r h‚jp†r¡jj»†r¢hkX:=r£†r¤jj»†r¥h‚jp†r¦hkjÕ†r§j©j׆r¨h‚Xnextr©†rªj©j†r«jjȆr¬jX              r­†r®hXWHILEr¯†r°jj»†r±h‚j‚†r²jj»†r³hkjñ†r´jj»†rµj9XNILr¶†r·jj»†r¸hXDOr¹†rºjjȆr»jX                r¼†r½h‚jl†r¾jj»†r¿hkX:=rÀ†rÁjj»†rÂh‚j‚†rÃhkjÕ†rÄj©j׆rÅh‚XidrƆrÇj©j†rÈjX  rɆrÊh‚jl†rËhkjÕ†rÌj©j׆rÍh‚XcountrΆrÏjj»†rÐhkX:=rцrÒjj»†rÓh‚jl†rÔhkjÕ†rÕj©j׆rÖh‚Xcountr׆rØjj»†rÙhkj܆rÚjj»†rÛj“jY†rÜj©j†rÝjjȆrÞjX                r߆ràhXIFrá†râjj»†rãh‚jl†rähkjÕ†råj©j׆ræh‚Xcountrç†rèjj»†réhkjè†rêjj»†rëj“jõ†rìjj»†ríhXTHENrî†rïjjȆrðjX                  rñ†ròjˆX(* insert p^ in leader list *)ró†rôjjȆrõjX                  rö†r÷h‚jl†røhkjÕ†rùj©j׆rúh‚Xnextrû†rüjj»†rýhkX:=rþ†rÿjj»†rh‚jp†rj©j†rjX  r†rh‚jp†rjj»†rhkX:=r†rjj»†r	h‚jl†r
j©j†rjjȆrjX                r
†rhXENDr†rj©j†rjjȆrjX                r†rh‚j‚†rjj»†rhkX:=r†rjj»†rh‚j‚†rhkjÕ†rj©j׆rh‚Xnextr†rj©j†rjjȆr jX              r!†r"hXENDr#†r$j©j†r%jjȆr&jX            r'†r(hXENDr)†r*j©j†r+jjȆr,jX
          r-†r.hXENDr/†r0j©j†r1jX

r2†r3jX
          r4†r5hXIFr6†r7jj»†r8h‚j#†r9jj»†r:hkjñ†r;jj»†r<j“jõ†r=jj»†r>hXTHENr?†r@jjȆrAjX            rB†rCh‚XsortedrD†rEjj»†rFhkX:=rG†rHjj»†rIj9XFALSErJ†rKj©j†rLjjȆrMjX
          rN†rOhXELSErP†rQjjȆrRjX            rS†rTh‚XsortedrU†rVjj»†rWhkX:=rX†rYjj»†rZj9XTRUEr[†r\j©j†r]jjȆr^jX
          r_†r`hXENDra†rbj©j†rcjX

rd†rejX       rf†rghXENDrh†rij©j†rjjX

rk†rljX    rm†rnhXENDro†rpjj»†rqh‚XTopoSortrr†rsj©j†rtjX

ru†rvhXBEGINrw†rxjjȆryhXENDrz†r{jj»†r|h‚XSortingr}†r~j©j׆rjjȆr€e.