•procedure
drainage();
•[R]
begin
•
Up := 0; Dn := 0;
•
read(A);
•
Up := A=(min<<A);
•
Dn := A=(max<<A);
•
repeat
• Tu := Up; Td := Dn;
• Dn := Dn | (A<=A@no &
Dn@no) | (A<=Ane & Dn@ne)
• | (A<=A@ea & Dn@ea) | (A<=Ase & Dn@se)
• | (A<=A@so & Dn@so) | (A<=Asw & Dn@sw)
• | (A<=A@we & Dn@we) | (A<=Anw &
Dn@nw);
• Up := Up | (A>=A@no &
Up@no) | (A>=Ane & Up@ne)
• |
(A>=A@ea & Up@ea) | (A>=Ase & Up@se)
• | (A>=A@so & Up@so) | (A>=Asw & Up@sw)
• | (A>=A@we & Up@we) | (A>=Anw &
Up@nw);
•
until ! |<<((Tu != Up) | (Td != Dn));
•
write(Up&Dn);
• end;