@0
MOV RIGHT, DOWN

@1
MOV RIGHT, LEFT

@2
A: MOV RIGHT, ACC
JEZ G
MOV ACC, LEFT
JMP A
G: MOV RIGHT, ACC
SAV
S: MOV DOWN, ACC
JEZ G
SWP
MOV ACC, DOWN
SWP
JMP S

@3
A: MOV UP, ACC
MOV ACC, LEFT
JNZ A
BS: MOV UP, ACC
JEZ CS
MOV ACC, LEFT
JMP BS
CS: MOV UP, ACC
JEZ A
ADD 300
MOV ACC, LEFT
JMP CS

@4
MOV 0, LEFT
T: MOV RIGHT, NIL
F: MOV LEFT, ACC
JEZ FE
MOV ACC, RIGHT
MOV ACC, RIGHT
JMP F
FE: MOV ACC, RIGHT
MOV 0, LEFT
MOV 0, DOWN
R: MOV DOWN, ACC
JEZ T
MOV ACC, LEFT
JMP R

@5
MOV 1, UP
MOV 0, LEFT
E: MOV LEFT, ACC
JEZ EN
SUB UP
MOV 1, UP
JEZ MATCH
MOV LEFT, DOWN
JMP E
MATCH: ADD LEFT
ADD 300
MOV ACC, DOWN
JMP E
EN: MOV UP, NIL
MOV 0, UP

@7
MOV 0, RIGHT
MOV UP, NIL
L: MOV RIGHT, ACC
JEZ Z
SUB 600
JLZ P
MOV ACC, DOWN
MOV -1, UP
JMP L
P: ADD 600
MOV ACC, UP
JMP L
Z: MOV 0, UP
