$ od -c -N 50000 [_CD6_]<sil>GobSources.dm!1>router1.bcpl
0000000    /   /  \t  \t   R       o       u       t       i       n    
0000020    g               A       l       g       o       r       i    
0000040    t       h       m       s  \r  \r   /   /  \t   P   a   r   t
0000060        2       -       H   e   u   r   i   s   t   i   c   s  \r
0000100   \r   /   /  \t   E   .       M   c   C   r   e   i   g   h   t
0000120   \r   /   /  \t   l   a   s   t       e   d   i   t   e   d    
0000140    J   u   n   e       1   5   ,       1   9   7   7           1
0000160    1   :   5   8       A   M           b   y       e   m   m  \r
0000200   \r   e   x   t   e   r   n   a   l  \r  \t   [      \r  \t   M
0000220    o   v   e   B   l   o   c   k  \r  \t   Z   e   r   o  \r  \t
0000240    C   a   l   l   S   w   a   t  \r  \t   b   e   s   t   T   o
0000260    t   a   l   N   e   t   L   e   n   g   t   h  \r  \t   h   e
0000300    u   r   i   s   t   i   c   W   o   r   k  \r  \r  \t   G   e
0000320    t   O   r   d   e   r   e   d   R   a   n   d   o   m   S   e
0000340    t  \r  \t   A   r   c   L   e   n   g   t   h  \r  \r  \t   f
0000360    o   r   c   e   F   i   r   s   t   N   o   d   e   T   o   E
0000400    n   d  \r  \t   n  \r  \t   P   e   r   m  \r  \r  \t   H   e
0000420    u   r   i   s   t   i   c   N   e   t  \r  \t   ]  \r  \r  \r
0000440    s   t   a   t   i   c  \r  \t   [      \r  \t   a   r   c   L
0000460    e   n   s  \r  \t   t   o   t   a   l   C   i   r   c   u   i
0000500    t   L   e   n   g   t   h  \r  \t   l   o   n   g   e   s   t
0000520    A   r   c   L   e   n  \r  \t   l   o   n   g   e   s   t   A
0000540    r   c  \r  \t   h   e   u   r   i   s   t   i   c   I   m   p
0000560    r   o   v   e   m   e   n   t   s  \r  \t   i   m   p   r   o
0000600    v   e   m   e   n   t   B   r   e   a   k       =       -   1
0000620   \r  \t   h   e   u   r   i   s   t   i   c   W   o   r   k    
0000640    =       2   0  \r  \t   ]  \r  \r  \f  \r   /   /  \t   2   .
0000660        A       h   e   u   r   i   s   t   i   c       a   l   g
0000700    o   r   i   t   h   m       w   h   i   c   h       d   o   e
0000720    s       n   o   t       g   u   a   r   a   n   t   e   e    
0000740    a   n  \r   /   /  \t   o   p   t   i   m   u   m       b   u
0000760    t       i   s       m   u   c   h       m   o   r   e       e
0001000    c   o   n   o   m   i   c   a   l       t   h   a   n       t
0001020    h   e  \r   /   /  \t   c   o   m   b   i   n   a   t   o   r
0001040    i   a   l       o   n   e       f   o   r       l   a   r   g
0001060    e       n   e   t   s   .  \r  \r   l   e   t       H   e   u
0001100    r   i   s   t   i   c   N   e   t   (   )       b   e  \r  \r
0001120   \t   [       G   e   n   e   r   a   t   e   G   o   o   d   P
0001140    e   r   m   (   )  \r  \t   H   e   u   r   i   s   t   i   c
0001160    I   m   p   r   o   v   e   (   )  \r  \t   ]  \r  \r  \r   a
0001200    n   d       G   e   n   e   r   a   t   e   G   o   o   d   P
0001220    e   r   m   (   )       b   e  \r  \r  \t   [       l   e   t
0001240        B   U   S   p   a   n   D   e   s   t       =       v   e
0001260    c       2   0   0  \r  \t   M   a   k   e   M   i   n   S   p
0001300    a   n   T   r   e   e   (   B   U   S   p   a   n   D   e   s
0001320    t   )  \r  \r  \t   l   e   t       R   o   o   t       =    
0001340    R   e   R   o   o   t   (   B   U   S   p   a   n   D   e   s
0001360    t   )  \r  \r  \t   l   e   t       T   D   S   p   a   n   S
0001400    o   n   s       =       v   e   c       2   0   0  \r  \t   l
0001420    e   t       T   D   S   p   a   n   B   r   o   s       =    
0001440    v   e   c       2   0   0  \r  \t   R   e   R   e   p   r   e
0001460    s   e   n   t   (   B   U   S   p   a   n   D   e   s   t   ,
0001500        T   D   S   p   a   n   S   o   n   s   ,       T   D   S
0001520    p   a   n   B   r   o   s   )  \r  \r  \t   T   r   e   e   W
0001540    a   l   k   (   R   o   o   t   ,       T   D   S   p   a   n
0001560    S   o   n   s   ,       T   D   S   p   a   n   B   r   o   s
0001600    ,       P   e   r   m   )  \r  \r  \t   C   y   c   l   e   T
0001620    o   R   e   m   o   v   e   L   o   n   g   e   s   t   (   P
0001640    e   r   m   )  \r  \t   ]  \r  \r  \r   a   n   d       M   a
0001660    k   e   M   i   n   S   p   a   n   T   r   e   e   (   B   U
0001700    S   p   a   n   D   e   s   t   )       b   e  \r  \r  \t   [
0001720        l   e   t       I   n   C   l   u   s   t   e   r       =
0001740        v   e   c       2   0   0  \r  \t   l   e   t       N   e
0001760    a   r   e   s   t   E   l   t   I   n   C   l   u   s   t   e
0002000    r       =       v   e   c       2   0   0  \r  \t   l   e   t
0002020        D   i   s   t   T   o   C   l   u   s   t   e   r       =
0002040        v   e   c       2   0   0  \r  \r  \t   l   e   t       N
0002060    e   a   r   e   s   t   O   u   t   s   i   d   e   E   l   t
0002100        =       0  \r  \t   l   e   t       S   h   o   r   t   e
0002120    s   t   D   i   s   t   T   o   C   l   u   s   t   e   r    
0002140    =       n   i   l  \r  \r  \t   f   o   r       i   =   1    
0002160    t   o       n       d   o  \r  \t  \t   [       I   n   C   l
0002200    u   s   t   e   r   !   i       =       (   i       e   q    
0002220    1   )  \r  \t  \t   i   f       I   n   C   l   u   s   t   e
0002240    r   !   i       t   h   e   n  \r  \t  \t  \t   [       B   U
0002260    S   p   a   n   D   e   s   t   !   i       =       0  \r  \t
0002300   \t  \t   l   o   o   p  \r  \t  \t  \t   ]  \r  \r  \t  \t   N
0002320    e   a   r   e   s   t   E   l   t   I   n   C   l   u   s   t
0002340    e   r   !   i       =       1  \r  \t  \t   D   i   s   t   T
0002360    o   C   l   u   s   t   e   r   !   i       =       A   r   c
0002400    L   e   n   g   t   h   (   1   ,       i   )  \r  \t  \t   i
0002420    f       (   N   e   a   r   e   s   t   O   u   t   s   i   d
0002440    e   E   l   t       e   q       0   )       %  \r  \t  \t  \t
0002460        (   D   i   s   t   T   o   C   l   u   s   t   e   r   !
0002500    i       l   s       S   h   o   r   t   e   s   t   D   i   s
0002520    t   T   o   C   l   u   s   t   e   r   )  \r  \t  \t  \t   t
0002540    h   e   n  \r  \t  \t  \t   [       N   e   a   r   e   s   t
0002560    O   u   t   s   i   d   e   E   l   t       =       i  \r  \t
0002600   \t  \t   S   h   o   r   t   e   s   t   D   i   s   t   T   o
0002620    C   l   u   s   t   e   r       =       D   i   s   t   T   o
0002640    C   l   u   s   t   e   r   !   i  \r  \t  \t  \t   ]  \r  \t
0002660   \t   ]  \r  \r  \r  \t   w   h   i   l   e       N   e   a   r
0002700    e   s   t   O   u   t   s   i   d   e   E   l   t       n   e
0002720        0       d   o  \r  \r  \t  \t   [       B   U   S   p   a
0002740    n   D   e   s   t   !   N   e   a   r   e   s   t   O   u   t
0002760    s   i   d   e   E   l   t       =       N   e   a   r   e   s
0003000    t   E   l   t   I   n   C   l   u   s   t   e   r   !   N   e
0003020    a   r   e   s   t   O   u   t   s   i   d   e   E   l   t  \r
0003040   \t  \t   I   n   C   l   u   s   t   e   r   !   N   e   a   r
0003060    e   s   t   O   u   t   s   i   d   e   E   l   t       =    
0003100    t   r   u   e  \r  \r  \t  \t   l   e   t       N   e   w   C
0003120    l   u   s   t   e   r   E   l   t       =       N   e   a   r
0003140    e   s   t   O   u   t   s   i   d   e   E   l   t  \r  \t  \t
0003160    N   e   a   r   e   s   t   O   u   t   s   i   d   e   E   l
0003200    t       =       0  \r  \r  \t  \t   f   o   r       i   =   1
0003220        t   o       n       d   o  \r  \t  \t  \t   [       i   f
0003240        I   n   C   l   u   s   t   e   r   !   i       t   h   e
0003260    n       l   o   o   p  \r  \t  \t  \t   l   e   t       D   i
0003300    s   t   T   o   N   e   w   C   l   u   s   t   e   r   E   l
0003320    t       =       A   r   c   L   e   n   g   t   h   (   i   ,
0003340        N   e   w   C   l   u   s   t   e   r   E   l   t   )  \r
0003360   \t  \t  \t   i   f       D   i   s   t   T   o   N   e   w   C
0003400    l   u   s   t   e   r   E   l   t       l   s       D   i   s
0003420    t   T   o   C   l   u   s   t   e   r   !   i       t   h   e
0003440    n  \r  \t  \t  \t  \t   [       D   i   s   t   T   o   C   l
0003460    u   s   t   e   r   !   i       =       D   i   s   t   T   o
0003500    N   e   w   C   l   u   s   t   e   r   E   l   t  \r  \t  \t
0003520   \t  \t   N   e   a   r   e   s   t   E   l   t   I   n   C   l
0003540    u   s   t   e   r   !   i       =       N   e   w   C   l   u
0003560    s   t   e   r   E   l   t  \r  \t  \t  \t  \t   ]  \r  \r  \t
0003600   \t  \t   i   f       (   N   e   a   r   e   s   t   O   u   t
0003620    s   i   d   e   E   l   t       e   q       0   )       %  \r
0003640   \t  \t  \t  \t       (   D   i   s   t   T   o   C   l   u   s
0003660    t   e   r   !   i       l   s       S   h   o   r   t   e   s
0003700    t   D   i   s   t   T   o   C   l   u   s   t   e   r   )  \r
0003720   \t  \t  \t  \t   t   h   e   n  \r  \t  \t  \t  \t   [       N
0003740    e   a   r   e   s   t   O   u   t   s   i   d   e   E   l   t
0003760        =       i  \r  \t  \t  \t  \t   S   h   o   r   t   e   s
0004000    t   D   i   s   t   T   o   C   l   u   s   t   e   r       =
0004020        D   i   s   t   T   o   C   l   u   s   t   e   r   !   i
0004040   \r  \t  \t  \t  \t   ]  \r  \t  \t  \t   ]  \r  \t  \t   ]  \r
0004060   \t   ]  \r  \r  \r  \r   a   n   d       R   e   R   o   o   t
0004100    (   B   U   D   e   s   t   )       =       v   a   l   o   f
0004120   \r  \r  \t   [       l   e   t       R   o   o   t       =    
0004140    1  \t   /   /       r   e   -   r   o   o   t       t   h   e
0004160        s   p   a   n   n   i   n   g       t   r   e   e       a
0004200    t       a       u   n   a   r   y       n   o   d   e  \r  \t
0004220    u   n   l   e   s   s       f   o   r   c   e   F   i   r   s
0004240    t   N   o   d   e   T   o   E   n   d       d   o  \r  \t  \t
0004260    [       l   e   t       I   n   t   o       =       v   e   c
0004300        2   0   0  \r  \t  \t   Z   e   r   o   (   I   n   t   o
0004320    +   1   ,       n   )  \r  \t  \t   f   o   r       i   =   1
0004340        t   o       n       d   o  \r  \t  \t  \t   I   n   t   o
0004360    !   (   B   U   D   e   s   t   !   i   )   =   I   n   t   o
0004400    !   (   B   U   D   e   s   t   !   i   )   +   1  \r  \t  \t
0004420    f   o   r       i   =   1       t   o       n       d   o  \r
0004440   \t  \t  \t   i   f       I   n   t   o   !   i       e   q    
0004460    0       t   h   e   n  \r  \t  \t  \t  \t   [       R   o   o
0004500    t       =       i  \r  \t  \t  \t  \t   b   r   e   a   k  \r
0004520   \t  \t  \t  \t   ]  \r  \t  \t   ]  \r  \r  \t   l   e   t    
0004540    F   a   t   h   e   r       =       v   e   c       2   0   0
0004560   \r  \t   l   e   t       C   u   r   N   o   d   e       =    
0004600    R   o   o   t  \r  \t   l   e   t       C   u   r   A   l   t
0004620        =       0  \r  \t   w   h   i   l   e       B   U   D   e
0004640    s   t   !   C   u   r   N   o   d   e       n   e       0    
0004660    d   o  \r  \t  \t   [       F   a   t   h   e   r   !   C   u
0004700    r   A   l   t       =       C   u   r   N   o   d   e  \r  \t
0004720   \t   C   u   r   A   l   t       =       C   u   r   A   l   t
0004740    +   1  \r  \t  \t   C   u   r   N   o   d   e       =       B
0004760    U   D   e   s   t   !   C   u   r   N   o   d   e  \r  \t  \t
0005000    ]  \r  \r  \t   w   h   i   l   e       C   u   r   A   l   t
0005020        g   r       0       d   o  \r  \t  \t   [       C   u   r
0005040    A   l   t       =       C   u   r   A   l   t   -   1  \r  \t
0005060   \t   B   U   D   e   s   t   !   C   u   r   N   o   d   e    
0005100    =       F   a   t   h   e   r   !   C   u   r   A   l   t  \r
0005120   \t  \t   C   u   r   N   o   d   e       =       F   a   t   h
0005140    e   r   !   C   u   r   A   l   t  \r  \t  \t   ]  \r  \r  \t
0005160    B   U   D   e   s   t   !   R   o   o   t       =       0  \r
0005200   \t   r   e   s   u   l   t   i   s       R   o   o   t  \r  \t
0005220    ]  \r  \r  \r   a   n   d       R   e   R   e   p   r   e   s
0005240    e   n   t   (   B   U   D   e   s   t   ,       T   D   S   o
0005260    n   s   ,       T   D   B   r   o   s   )       b   e  \r  \r
0005300   \t   [       Z   e   r   o   (   T   D   S   o   n   s   +   1
0005320    ,       n   )  \r  \t   Z   e   r   o   (   T   D   B   r   o
0005340    s   +   1   ,       n   )  \r  \r  \t   f   o   r       i   =
0005360    1       t   o       n       d   o  \r  \t  \t   [       l   e
0005400    t       F   a   t   h   e   r       =       B   U   D   e   s
0005420    t   !   i  \r  \t  \t   i   f       F   a   t   h   e   r    
0005440    e   q       0       t   h   e   n       l   o   o   p  \t   /
0005460    /       t   h   i   s       i   s       t   h   e       r   o
0005500    o   t  \r  \r  \t  \t   T   D   B   r   o   s   !   i       =
0005520        T   D   S   o   n   s   !   F   a   t   h   e   r  \r  \t
0005540   \t   T   D   S   o   n   s   !   F   a   t   h   e   r       =
0005560        i  \r  \t  \t   ]  \r  \t   ]  \r  \r  \r   a   n   d    
0005600    T   r   e   e   W   a   l   k   (   R   o   o   t   ,       T
0005620    D   S   o   n   s   ,       T   D   B   r   o   s   ,       P
0005640    e   r   m   )       b   e  \r  \r  \t   [       l   e   t    
0005660    B   r   o   S   t   a   c   k       =       v   e   c       2
0005700    0   0  \r  \t   l   e   t       D   e   p   t   h       =    
0005720    0  \r  \t   l   e   t       N   o   d   e   s   I   n   P   e
0005740    r   m       =       0  \r  \r  \t   w   h   i   l   e       D
0005760    e   p   t   h       g   e       0       d   o  \r  \t  \t   [
0006000        N   o   d   e   s   I   n   P   e   r   m       =       N
0006020    o   d   e   s   I   n   P   e   r   m   +   1  \r  \t  \t   P
0006040    e   r   m   !   N   o   d   e   s   I   n   P   e   r   m    
0006060    =       R   o   o   t  \r  \r  \t  \t   l   e   t       S   o
0006100    n       =       T   D   S   o   n   s   !   R   o   o   t  \r
0006120   \t  \t   i   f       S   o   n       n   e       0       t   h
0006140    e   n  \r  \t  \t  \t   [       B   r   o   S   t   a   c   k
0006160    !   D   e   p   t   h       =       T   D   B   r   o   s   !
0006200    R   o   o   t  \r  \t  \t  \t   i   f       B   r   o   S   t
0006220    a   c   k   !   D   e   p   t   h       n   e       0       t
0006240    h   e   n       D   e   p   t   h       =       D   e   p   t
0006260    h   +   1  \r  \t  \t  \t   R   o   o   t       =       S   o
0006300    n  \r  \t  \t  \t   l   o   o   p  \r  \t  \t  \t   ]  \r  \r
0006320   \t  \t   R   o   o   t       =       T   D   B   r   o   s   !
0006340    R   o   o   t  \r  \t  \t   i   f       R   o   o   t       n
0006360    e       0       t   h   e   n       l   o   o   p  \r  \r  \t
0006400   \t   D   e   p   t   h       =       D   e   p   t   h   -   1
0006420   \r  \t  \t   R   o   o   t       =       B   r   o   S   t   a
0006440    c   k   !   D   e   p   t   h  \r  \t  \t   ]  \r  \t   ]  \r
0006460   \r  \r   a   n   d       C   y   c   l   e   T   o   R   e   m
0006500    o   v   e   L   o   n   g   e   s   t   (   P   e   r   m   )
0006520        b   e  \r  \r  \t   [       l   e   t       N   e   w   P
0006540    e   r   m       =       v   e   c       2   0   0  \r  \t   l
0006560    e   t       L   o   n   g   e   s   t   A   r   c   P   o   s
0006600        =       n   i   l  \r  \t   l   e   t       L   o   n   g
0006620    e   s   t   A   r   c   L   e   n       =       -   1  \r  \r
0006640   \t   t   e   s   t       f   o   r   c   e   F   i   r   s   t
0006660    N   o   d   e   T   o   E   n   d  \r  \r  \t   i   f   n   o
0006700    t  \t   [       f   o   r       i   =   1       t   o       n
0006720        d   o  \r  \t  \t  \t   [       l   e   t       T   h   i
0006740    s   A   r   c   L   e   n       =       A   r   c   L   e   n
0006760    g   t   h   (   P   e   r   m   !   i   ,  \r  \t  \t  \t  \t
0007000   \t   P   e   r   m   !   (   (   i       r   e   m       n   )
0007020    +   1   )   )  \r  \t  \t  \t   i   f       T   h   i   s   A
0007040    r   c   L   e   n       g   r       L   o   n   g   e   s   t
0007060    A   r   c   L   e   n       t   h   e   n  \r  \t  \t  \t  \t
0007100    [       L   o   n   g   e   s   t   A   r   c   L   e   n    
0007120    =       T   h   i   s   A   r   c   L   e   n  \r  \t  \t  \t
0007140   \t   L   o   n   g   e   s   t   A   r   c   P   o   s       =
0007160        i  \r  \t  \t  \t  \t   ]  \r  \t  \t  \t   ]  \r  \r  \t
0007200   \t   M   o   v   e   B   l   o   c   k   (   l   v       (   N
0007220    e   w   P   e   r   m   !   1   )   ,       l   v       (   P
0007240    e   r   m   !   (   L   o   n   g   e   s   t   A   r   c   P
0007260    o   s   +   1   )   )   ,  \r  \t  \t  \t   n   -   L   o   n
0007300    g   e   s   t   A   r   c   P   o   s   )  \r  \t  \t   M   o
0007320    v   e   B   l   o   c   k   (   l   v       (   N   e   w   P
0007340    e   r   m   !   (   (   n   -   L   o   n   g   e   s   t   A
0007360    r   c   P   o   s   )   +   1   )   )   ,       l   v       (
0007400    P   e   r   m   !   1   )   ,  \r  \t  \t  \t   L   o   n   g
0007420    e   s   t   A   r   c   P   o   s   )  \r  \t  \t   M   o   v
0007440    e   B   l   o   c   k   (   l   v       (   P   e   r   m   !
0007460    1   )   ,       l   v       (   N   e   w   P   e   r   m   !
0007500    1   )   ,       n   )  \r  \t  \t   ]  \r  \r  \t   i   f   s
0007520    o       i   f       A   r   c   L   e   n   g   t   h   (   P
0007540    e   r   m   !   1   ,       P   e   r   m   !   2   )       g
0007560    r  \r  \t  \t   A   r   c   L   e   n   g   t   h   (   P   e
0007600    r   m   !   n   ,       P   e   r   m   !   1   )       t   h
0007620    e   n       /   /       r   e   v   e   r   s   e       P   e
0007640    r   m   !   2   .   .   P   e   r   m   !   n  \r  \t  \t   f
0007660    o   r       i   =   1       t   o       (   n   -   1   )   /
0007700    2       d   o  \r  \t  \t  \t   [       l   e   t       T    
0007720    =       P   e   r   m   !   (   i   +   1   )  \r  \t  \t  \t
0007740    P   e   r   m   !   (   i   +   1   )       =       P   e   r
0007760    m   !   (   n   +   1   -   i   )  \r  \t  \t  \t   P   e   r
0010000    m   !   (   n   +   1   -   i   )       =       T  \r  \t  \t
0010020   \t   ]  \r  \t   ]  \r  \r  \r   a   n   d       H   e   u   r
0010040    i   s   t   i   c   I   m   p   r   o   v   e   (   )       b
0010060    e  \r  \r  \t   [       l   e   t       O   r   i   g   F   i
0010100    r   s   t   N   o   d   e       =       P   e   r   m   !   1
0010120   \r  \r  \t   l   e   t       a   L       =       v   e   c    
0010140    2   0   0  \r  \t   a   r   c   L   e   n   s       =       a
0010160    L  \r  \r  \t   l   e   t       t   e   m   p   A   r   c   L
0010200    e   n       =       n   i   l  \r  \t   t   o   t   a   l   C
0010220    i   r   c   u   i   t   L   e   n   g   t   h       =       0
0010240   \r  \r  \t   l   e   t       t   r   i   e   s   S   i   n   c
0010260    e   I   m   p   r   o   v   e   m   e   n   t       =       0
0010300   \r  \t   l   e   t       c   r   i   t   e   r   i   o   n    
0010320    =       h   e   u   r   i   s   t   i   c   W   o   r   k   *
0010340    n  \r  \t   l   o   n   g   e   s   t   A   r   c   L   e   n
0010360        =       -   1  \r  \r  \t   f   o   r       i   =   1    
0010400    t   o       n       d   o  \r  \t  \t   [       t   e   m   p
0010420    A   r   c   L   e   n       =       A   r   c   L   e   n   g
0010440    t   h   (   P   e   r   m   !   i   ,       P   e   r   m   !
0010460    (   (   i       r   e   m       n   )   +   1   )   )  \r  \t
0010500   \t   t   o   t   a   l   C   i   r   c   u   i   t   L   e   n
0010520    g   t   h       =       t   o   t   a   l   C   i   r   c   u
0010540    i   t   L   e   n   g   t   h   +   t   e   m   p   A   r   c
0010560    L   e   n  \r  \t  \t   a   r   c   L   e   n   s   !   i    
0010600    =       t   e   m   p   A   r   c   L   e   n  \r  \t  \t   i
0010620    f       t   e   m   p   A   r   c   L   e   n       g   r    
0010640    l   o   n   g   e   s   t   A   r   c   L   e   n       t   h
0010660    e   n  \r  \t  \t  \t   [       l   o   n   g   e   s   t   A
0010700    r   c       =       P   e   r   m   !   i  \r  \t  \t  \t   l
0010720    o   n   g   e   s   t   A   r   c   L   e   n       =       t
0010740    e   m   p   A   r   c   L   e   n  \r  \t  \t  \t   ]  \r  \t
0010760   \t   ]  \r  \r  \t   i   f       f   o   r   c   e   F   i   r
0011000    s   t   N   o   d   e   T   o   E   n   d       t   h   e   n
0011020   \r  \t  \t   t   e   s   t       a   r   c   L   e   n   s   !
0011040    n       g   r       a   r   c   L   e   n   s   !   1  \r  \t
0011060   \t   i   f   s   o  \t   [       l   o   n   g   e   s   t   A
0011100    r   c       =       P   e   r   m   !   n  \r  \t  \t  \t   l
0011120    o   n   g   e   s   t   A   r   c   L   e   n       =       a
0011140    r   c   L   e   n   s   !   n  \r  \t  \t  \t   ]  \r  \t  \t
0011160    i   f   n   o   t  \t   [       l   o   n   g   e   s   t   A
0011200    r   c       =       P   e   r   m   !   1  \r  \t  \t  \t   l
0011220    o   n   g   e   s   t   A   r   c   L   e   n       =       a
0011240    r   c   L   e   n   s   !   1  \r  \t  \t  \t   ]  \r  \r  \t
0011260    b   e   s   t   T   o   t   a   l   N   e   t   L   e   n   g
0011300    t   h       =       t   o   t   a   l   C   i   r   c   u   i
0011320    t   L   e   n   g   t   h   -   l   o   n   g   e   s   t   A
0011340    r   c   L   e   n  \r  \t   h   e   u   r   i   s   t   i   c
0011360    I   m   p   r   o   v   e   m   e   n   t   s       =       0
0011400   \r  \r  \t   w   h   i   l   e       t   r   i   e   s   S   i
0011420    n   c   e   I   m   p   r   o   v   e   m   e   n   t       l
0011440    s       c   r   i   t   e   r   i   o   n       d   o  \r  \t
0011460   \t   [       t   r   i   e   s   S   i   n   c   e   I   m   p
0011500    r   o   v   e   m   e   n   t       =       t   r   i   e   s
0011520    S   i   n   c   e   I   m   p   r   o   v   e   m   e   n   t
0011540    +   1  \r  \r  \t  \t   i   f       f   o   r   c   e   F   i
0011560    r   s   t   N   o   d   e   T   o   E   n   d       &       (
0011600    l   o   n   g   e   s   t   A   r   c       n   e       P   e
0011620    r   m   !   1   )       &  \r  \t  \t  \t   (   l   o   n   g
0011640    e   s   t   A   r   c       n   e       P   e   r   m   !   n
0011660    )       t   h   e   n  \r  \t  \t  \t   [       C   a   l   l
0011700    S   w   a   t   (   "   H   e   u   r   i   s   t   i   c    
0011720    b   u   g       1   "   )  \r  \t  \t  \t   ]  \r  \r  \t  \t
0011740    l   e   t       s   e   g   m   e   n   t   L   a   s   t   s
0011760        =       v   e   c       4  \r  \t  \t   G   e   t   O   r
0012000    d   e   r   e   d   R   a   n   d   o   m   S   e   t   (   3
0012020    ,       s   e   g   m   e   n   t   L   a   s   t   s   ,    
0012040    1   ,       n   )  \r  \r  \t  \t   l   e   t       s   e   g
0012060    m   e   n   t   F   i   r   s   t   s       =       v   e   c
0012100        4  \r  \t  \t   s   e   g   m   e   n   t   F   i   r   s
0012120    t   s   !   1       =       (   s   e   g   m   e   n   t   L
0012140    a   s   t   s   !   3       g   e       n   )   ?       1   ,
0012160   \r  \t  \t  \t  \t  \t   s   e   g   m   e   n   t   L   a   s
0012200    t   s   !   3   +   1  \r  \t  \t   f   o   r       i   =   2
0012220        t   o       3       d   o  \r  \t  \t  \t   s   e   g   m
0012240    e   n   t   F   i   r   s   t   s   !   i       =       (   s
0012260    e   g   m   e   n   t   L   a   s   t   s   !   (   i   -   1
0012300    )   )   +   1  \r  \r  \t  \t   i   f       T   h   i   s   A
0012320    r   r   a   n   g   e   m   e   n   t   B   e   t   t   e   r
0012340    (   s   e   g   m   e   n   t   F   i   r   s   t   s   ,    
0012360    s   e   g   m   e   n   t   L   a   s   t   s   ,  \r  \t  \t
0012400   \t  \t   1   ,       3   ,       2   )       %  \r  \t  \t   T
0012420    h   i   s   A   r   r   a   n   g   e   m   e   n   t   B   e
0012440    t   t   e   r   (   s   e   g   m   e   n   t   F   i   r   s
0012460    t   s   ,       s   e   g   m   e   n   t   L   a   s   t   s
0012500    ,  \r  \t  \t  \t  \t   1   ,       -   3   ,       -   2   )
0012520        %  \r  \t  \t   T   h   i   s   A   r   r   a   n   g   e
0012540    m   e   n   t   B   e   t   t   e   r   (   s   e   g   m   e
0012560    n   t   F   i   r   s   t   s   ,       s   e   g   m   e   n
0012600    t   L   a   s   t   s   ,  \r  \t  \t  \t  \t   1   ,       -
0012620    3   ,       2   )       %  \r  \t  \t   T   h   i   s   A   r
0012640    r   a   n   g   e   m   e   n   t   B   e   t   t   e   r   (
0012660    s   e   g   m   e   n   t   F   i   r   s   t   s   ,       s
0012700    e   g   m   e   n   t   L   a   s   t   s   ,  \r  \t  \t  \t
0012720   \t   1   ,       3   ,       -   2   )  \r  \t  \t  \t   t   h
0012740    e   n  \r  \t  \t  \t   [       h   e   u   r   i   s   t   i
0012760    c   I   m   p   r   o   v   e   m   e   n   t   s       =  \r
0013000   \t  \t  \t  \t   h   e   u   r   i   s   t   i   c   I   m   p
0013020    r   o   v   e   m   e   n   t   s   +   1  \r  \t  \t  \t   i
0013040    f       h   e   u   r   i   s   t   i   c   I   m   p   r   o
0013060    v   e   m   e   n   t   s       e   q       i   m   p   r   o
0013100    v   e   m   e   n   t   B   r   e   a   k  \r  \t  \t  \t  \t
0013120    t   h   e   n  \r  \t  \t  \t  \t   C   a   l   l   S   w   a
0013140    t   (   "   I   m   p   r   o   v   e   m   e   n   t       b
0013160    r   e   a   k   "   )  \r  \r  \t  \t  \t   t   r   i   e   s
0013200    S   i   n   c   e   I   m   p   r   o   v   e   m   e   n   t
0013220        =       0  \r  \t  \t  \t   ]  \r  \t  \t   ]  \r  \r  \t
0013240    M   o   v   e   L   o   n   g   e   s   t   A   r   c   T   o
0013260    E   n   d   :  \r  \r  \t   C   y   c   l   e   T   o   R   e
0013300    m   o   v   e   L   o   n   g   e   s   t   (   P   e   r   m
0013320    )  \r  \r  \t   i   f       f   o   r   c   e   F   i   r   s
0013340    t   N   o   d   e   T   o   E   n   d       t   h   e   n  \r
0013360   \t  \t   f   o   r       i   =   1       t   o       n   /   2
0013400        d   o  \r  \t  \t  \t   [       l   e   t       T       =
0013420        P   e   r   m   !   (   n   +   1   -   i   )  \t   /   /
0013440        r   e   v   e   r   s   e       i   t       t   o       g
0013460    e   t       f   i   r   s   t  \r  \t  \t  \t   P   e   r   m
0013500    !   (   n   +   1   -   i   )       =       P   e   r   m   !
0013520    i  \t   /   /       n   o   d   e       a   t       e   n   d
0013540   \r  \t  \t  \t   P   e   r   m   !   i       =       T  \r  \t
0013560   \t  \t   ]  \r  \r  \t   i   f       f   o   r   c   e   F   i
0013600    r   s   t   N   o   d   e   T   o   E   n   d       &       (
0013620    P   e   r   m   !   n       n   e       O   r   i   g   F   i
0013640    r   s   t   N   o   d   e   )       t   h   e   n  \r  \t  \t
0013660    C   a   l   l   S   w   a   t   (   "   H   e   u   r   i   s
0013700    t   i   c       b   u   g       2   "   )  \r  \t   ]  \r  \r
0013720   \r  \r   a   n   d       T   h   i   s   A   r   r   a   n   g
0013740    e   m   e   n   t   B   e   t   t   e   r   (   o   r   i   g
0013760    F   ,       o   r   i   g   L   ,       s   e   g   1   ,    
0014000    s   e   g   2   ,       s   e   g   3   )       =       v   a
0014020    l   o   f  \r  \t  \t  \t  \t  \r  \t   [       /   /       T
0014040    h   i   s       w   h   o   l   e       p   i   e   c   e    
0014060    o   f       c   o   d   e       w   i   l   l       f   a   l
0014100    l       a   p   a   r   t       o   n  \r  \t   /   /       t
0014120    h   e       f   l   o   o   r       u   n   l   e   s   s    
0014140    s   e   g   1       e   q       1   .       O   K   ?  \r  \r
0014160   \t   l   e   t       s   e   g       =       (   l   v       s
0014200    e   g   1   )   -   1  \r  \t   l   e   t       f       =    
0014220    v   e   c       4  \r  \t   l   e   t       l       =       v
0014240    e   c       4  \r  \t   f   o   r       i   =   1       t   o
0014260        3       d   o  \r  \t  \t   [       f   !   i       =    
0014300    (   s   e   g   !   i       l   s       0   )   ?       o   r
0014320    i   g   L   !   (   -   (   s   e   g   !   i   )   )   ,    
0014340    o   r   i   g   F   !   (   s   e   g   !   i   )  \r  \t  \t
0014360    l   !   i       =       (   s   e   g   !   i       l   s    
0014400    0   )   ?       o   r   i   g   F   !   (   -   (   s   e   g
0014420    !   i   )   )   ,       o   r   i   g   L   !   (   s   e   g
0014440    !   i   )  \r  \t  \t   ]  \r  \r  \t   l   e   t       n   e
0014460    w   A   r   c   L   e   n   s       =       v   e   c       4
0014500   \r  \r  \t   f   o   r       i   =   1       t   o       2    
0014520    d   o  \r  \t  \t   n   e   w   A   r   c   L   e   n   s   !
0014540    i       =       A   r   c   L   e   n   g   t   h   (   P   e
0014560    r   m   !   (   l   !   i   )   ,       P   e   r   m   !   (
0014600    f   !   (   i   +   1   )   )   )  \r  \t   n   e   w   A   r
0014620    c   L   e   n   s   !   3       =       A   r   c   L   e   n
0014640    g   t   h   (   P   e   r   m   !   (   l   !   3   )   ,    
0014660    P   e   r   m   !   (   f   !   1   )   )  \r  \r  \t   l   e
0014700    t       t   e   m   p   L   o   n   g   e   s   t   A   r   c
0014720        =       l   o   n   g   e   s   t   A   r   c  \r  \t   l
0014740    e   t       t   e   m   p   L   o   n   g   e   s   t   A   r
0014760    c   L   e   n       =       l   o   n   g   e   s   t   A   r
0015000    c   L   e   n  \r  \r  \t   i   f       v   a   l   o   f  \r
0015020   \t  \t   [       f   o   r       j   =   1       t   o       3
0015040        d   o  \r  \t  \t  \t   i   f       P   e   r   m   !   (
0015060    o   r   i   g   L   !   j   )       e   q       l   o   n   g
0015100    e   s   t   A   r   c       t   h   e   n  \r  \t  \t  \t  \t
0015120    r   e   s   u   l   t   i   s       t   r   u   e  \r  \t  \t
0015140    r   e   s   u   l   t   i   s       f   a   l   s   e  \r  \t
0015160   \t   ]  \r  \t  \t   t   h   e   n  \r  \r  \t  \t   [       t
0015200    e   m   p   L   o   n   g   e   s   t   A   r   c   L   e   n
0015220        =       0  \r  \t  \t   f   o   r       i   =   1       t
0015240    o       n       d   o  \r  \t  \t  \t   i   f       (   a   r
0015260    c   L   e   n   s   !   i       g   r       t   e   m   p   L
0015300    o   n   g   e   s   t   A   r   c   L   e   n   )       &  \r
0015320   \t  \t  \t   v   a   l   o   f  \r  \t  \t  \t  \t   [       f
0015340    o   r       j   =   1       t   o       3       d   o  \r  \t
0015360   \t  \t  \t  \t   i   f       o   r   i   g   L   !   j       e
0015400    q       i       t   h   e   n  \r  \t  \t  \t  \t  \t  \t   r
0015420    e   s   u   l   t   i   s       f   a   l   s   e  \r  \t  \t
0015440   \t  \t   r   e   s   u   l   t   i   s       t   r   u   e  \r
0015460   \t  \t  \t  \t   ]  \r  \t  \t  \t   t   h   e   n  \r  \t  \t
0015500   \t  \t   [       t   e   m   p   L   o   n   g   e   s   t   A
0015520    r   c       =       P   e   r   m   !   i  \r  \t  \t  \t  \t
0015540    t   e   m   p   L   o   n   g   e   s   t   A   r   c   L   e
0015560    n       =       a   r   c   L   e   n   s   !   i  \r  \t  \t
0015600   \t  \t   ]  \r  \t  \t   ]  \r  \r  \t   f   o   r       j   =
0015620    1       t   o       3       d   o  \r  \t  \t   i   f       n
0015640    e   w   A   r   c   L   e   n   s   !   j       g   r       t
0015660    e   m   p   L   o   n   g   e   s   t   A   r   c   L   e   n
0015700        t   h   e   n  \r  \t  \t  \t   [       t   e   m   p   L
0015720    o   n   g   e   s   t   A   r   c       =       -   (   P   e
0015740    r   m   !   (   l   !   j   )   )  \r  \t  \t  \t   t   e   m
0015760    p   L   o   n   g   e   s   t   A   r   c   L   e   n       =
0016000        n   e   w   A   r   c   L   e   n   s   !   j  \r  \t  \t
0016020   \t   ]  \r  \r  \t   i   f       f   o   r   c   e   F   i   r
0016040    s   t   N   o   d   e   T   o   E   n   d       t   h   e   n
0016060   \r  \t  \t   [       l   e   t       f   i   r   s   t   A   r
0016100    c       =       P   e   r   m   !   1  \r  \t  \t   l   e   t
0016120        f   i   r   s   t   A   r   c   L   e   n       =       a
0016140    r   c   L   e   n   s   !   1  \r  \t  \t   i   f       o   r
0016160    i   g   L   !   1       e   q       1       t   h   e   n  \r
0016200   \t  \t  \t   f   i   r   s   t   A   r   c   L   e   n       =
0016220        n   e   w   A   r   c   L   e   n   s   !   1  \r      \r
0016240   \t  \t   l   e   t       l   a   s   t   A   r   c       =    
0016260    P   e   r   m   !   n  \r  \t  \t   l   e   t       l   a   s
0016300    t   A   r   c   L   e   n       =       a   r   c   L   e   n
0016320    s   !   n  \r  \r  \t  \t   i   f       o   r   i   g   L   !
0016340    3       e   q       n  \r  \t  \t   t   h   e   n  \t   [    
0016360    l   a   s   t   A   r   c       =       P   e   r   m   !   (
0016400    l   !   3   )  \r  \t  \t  \t   l   a   s   t   A   r   c   L
0016420    e   n       =       n   e   w   A   r   c   L   e   n   s   !
0016440    3  \r  \t  \t  \t   ]  \r  \r  \t  \t   t   e   s   t       f
0016460    i   r   s   t   A   r   c   L   e   n       g   e       l   a
0016500    s   t   A   r   c   L   e   n  \r  \r  \t  \t   i   f   s   o
0016520   \t   [       t   e   m   p   L   o   n   g   e   s   t   A   r
0016540    c       =       -   f   i   r   s   t   A   r   c  \r  \t  \t
0016560   \t   t   e   m   p   L   o   n   g   e   s   t   A   r   c   L
0016600    e   n       =       f   i   r   s   t   A   r   c   L   e   n
0016620   \r  \t  \t  \t   ]  \r  \r  \t  \t   i   f   n   o   t  \t   [
0016640        t   e   m   p   L   o   n   g   e   s   t   A   r   c    
0016660    =       -   l   a   s   t   A   r   c  \r  \t  \t  \t   t   e
0016700    m   p   L   o   n   g   e   s   t   A   r   c   L   e   n    
0016720    =       l   a   s   t   A   r   c   L   e   n  \r  \t  \t  \t
0016740    ]  \r  \t  \t   ]  \r  \r  \t   l   e   t       n   e   w   N
0016760    e   t   L   e   n       =       t   o   t   a   l   C   i   r
0017000    c   u   i   t   L   e   n   g   t   h   +   v   a   l   o   f
0017020   \r  \t  \t  \t   [       l   e   t       s   u   m   =   0  \r
0017040   \t  \t  \t   f   o   r       j   =   1       t   o       3    
0017060    d   o  \r  \t  \t  \t  \t   s   u   m       =       s   u   m
0017100    +   n   e   w   A   r   c   L   e   n   s   !   j   -  \r  \t
0017120   \t  \t  \t  \t   a   r   c   L   e   n   s   !   (   o   r   i
0017140    g   L   !   j   )  \r  \t  \t  \t   r   e   s   u   l   t   i
0017160    s       s   u   m  \r  \t  \t  \t   ]   -  \r  \t  \t  \t   t
0017200    e   m   p   L   o   n   g   e   s   t   A   r   c   L   e   n
0017220   \r  \r  \t   u   n   l   e   s   s       n   e   w   N   e   t
0017240    L   e   n       l   s       b   e   s   t   T   o   t   a   l
0017260    N   e   t   L   e   n   g   t   h       d   o       r   e   s
0017300    u   l   t   i   s       f   a   l   s   e  \r  \r  \t   H   B
0017320    e   t   t   e   r   N   e   t   :  \r  \t   b   e   s   t   T
0017340    o   t   a   l   N   e   t   L   e   n   g   t   h       =    
0017360    n   e   w   N   e   t   L   e   n  \r  \r  \t   t   o   t   a
0017400    l   C   i   r   c   u   i   t   L   e   n   g   t   h       =
0017420        n   e   w   N   e   t   L   e   n   +   t   e   m   p   L
0017440    o   n   g   e   s   t   A   r   c   L   e   n  \r  \r  \t   l
0017460    e   t       t   e   m   p   V   e   c       =       v   e   c
0017500        2   0   0  \r  \t   l   e   t       t   e   m   p   L   e
0017520    n   s       =       v   e   c       2   0   0  \r  \r  \t   l
0017540    e   t       n   e   x   t   W   o   r   d       =       1  \r
0017560   \t   f   o   r       j   =   2       t   o       3       d   o
0017600   \r  \t  \t   [       t   e   s   t       s   e   g   !   j    
0017620    g   e       0  \r  \t  \t   i   f   s   o  \t   [       M   o
0017640    v   e   B   l   o   c   k   (   t   e   m   p   V   e   c   +
0017660    n   e   x   t   W   o   r   d   ,  \r  \t  \t  \t  \t   l   v
0017700        (   P   e   r   m   !   (   f   !   j   )   )   ,  \r  \t
0017720   \t  \t  \t   (   l   !   j   -   f   !   j   +   1   )   )  \r
0017740   \t  \t  \t   M   o   v   e   B   l   o   c   k   (   t   e   m
0017760    p   L   e   n   s   +   n   e   x   t   W   o   r   d   ,  \r
0020000   \t  \t  \t  \t   l   v       (   a   r   c   L   e   n   s   !
0020020    (   f   !   j   )   )   ,  \r  \t  \t  \t  \t   (   l   !   j
0020040    -   f   !   j   +   1   )   )  \r  \t  \t  \t   n   e   x   t
0020060    W   o   r   d       =       n   e   x   t   W   o   r   d   +
0020100    (   l   !   j   -   f   !   j   +   1   )  \r  \t  \t  \t   ]
0020120   \r  \r  \t  \t   i   f   n   o   t  \t   [       l   e   t    
0020140    c   u   r       =       f   !   j  \r  \t  \t  \t   w   h   i
0020160    l   e       c   u   r       g   e       l   !   j       d   o
0020200   \r  \t  \t  \t  \t   [       t   e   m   p   V   e   c   !   n
0020220    e   x   t   W   o   r   d       =       P   e   r   m   !   c
0020240    u   r  \r  \t  \t  \t  \t   t   e   m   p   L   e   n   s   !
0020260    n   e   x   t   W   o   r   d       =       a   r   c   L   e
0020300    n   s   !   (   c   u   r   -   1   )  \r  \t  \t  \t  \t   i
0020320    f       c   u   r       g   r       l   !   j       &  \r  \t
0020340   \t  \t  \t  \t   t   e   m   p   L   o   n   g   e   s   t   A
0020360    r   c       e   q  \r  \t  \t  \t  \t  \t  \t   P   e   r   m
0020400    !   (   c   u   r   -   1   )  \r  \t  \t  \t  \t  \t   t   h
0020420    e   n  \r  \t  \t  \t  \t  \t   t   e   m   p   L   o   n   g
0020440    e   s   t   A   r   c       =       P   e   r   m   !   c   u
0020460    r  \r  \t  \t  \t  \t   c   u   r       =       c   u   r   -
0020500    1  \r  \t  \t  \t  \t   n   e   x   t   W   o   r   d       =
0020520        n   e   x   t   W   o   r   d   +   1  \r  \t  \t  \t  \t
0020540    ]  \r  \t  \t  \t   ]  \r  \t  \t   t   e   m   p   L   e   n
0020560    s   !   (   n   e   x   t   W   o   r   d   -   1   )       =
0020600        n   e   w   A   r   c   L   e   n   s   !   j  \r  \t  \t
0020620    ]  \r  \r  \t   a   r   c   L   e   n   s   !   (   o   r   i
0020640    g   L   !   1   )       =       n   e   w   A   r   c   L   e
0020660    n   s   !   1  \r  \r  \t   l   o   n   g   e   s   t   A   r
0020700    c       =       (   t   e   m   p   L   o   n   g   e   s   t
0020720    A   r   c       g   e       0   )   ?       t   e   m   p   L
0020740    o   n   g   e   s   t   A   r   c   ,  \r  \t  \t  \t   -   t
0020760    e   m   p   L   o   n   g   e   s   t   A   r   c  \r  \t   l
0021000    o   n   g   e   s   t   A   r   c   L   e   n       =       t
0021020    e   m   p   L   o   n   g   e   s   t   A   r   c   L   e   n
0021040   \r  \r  \t   M   o   v   e   B   l   o   c   k   (   l   v    
0021060    (   P   e   r   m   !   (   o   r   i   g   F   !   2   )   )
0021100    ,       l   v       (   t   e   m   p   V   e   c   !   1   )
0021120    ,       n   e   x   t   W   o   r   d   -   1   )  \r  \t   M
0021140    o   v   e   B   l   o   c   k   (   l   v       (   a   r   c
0021160    L   e   n   s   !   (   o   r   i   g   F   !   2   )   )   ,
0021200        l   v       (   t   e   m   p   L   e   n   s   !   1   )
0021220    ,  \r  \t  \t  \t   n   e   x   t   W   o   r   d   -   1   )
0021240   \r  \t   r   e   s   u   l   t   i   s       t   r   u   e  \r
0021260   \t   ]  \r  \r  \r 032   (   6   3   5   )   \   f   1       9
0021300    6   f   0       2   3   f   1       5   0   f   0       2   0
0021320    f   1       4   5   9   5   f   0       1   8   f   1       3
0021340    0   4   5   f   0       1   8   f   1       3   4   f   0    
0021360    1   8   f   1  \r  \0                                        
0021366