@1
START: MOV UP, ACC
LOOP: SUB 1
JEZ DONE
ADD 1
SAV
MOV ACC, DOWN
MOV DOWN, ACC
JGZ LOOP
SWP
JMP LOOP
DONE: MOV 0, RIGHT

@2
MOV LEFT, DOWN

@3
INC: ADD 1
L: JRO RIGHT
M: MOV ACC, RIGHT
RESET: MOV 1, ACC
JMP L

@4
S: MOV UP, ACC
MOV 1, RIGHT
DIV: SUB RIGHT
JGZ CONT
JEZ MATCH
FAIL: MOV 2, LEFT
MOV 3, RIGHT
MOV -1, UP
JMP S
CONT: MOV -1, LEFT
MOV -1, RIGHT
JMP DIV
MATCH: MOV 1, LEFT
MOV 1, RIGHT
MOV LEFT, UP

@5
R: MOV RIGHT, ACC
L: SAV
MOV ANY, ACC
JEZ DO_R
SWP
K: MOV ACC, LEFT
JRO LEFT
MOV ACC, DOWN
JMP L
MOV 1, RIGHT
JMP R
DO_R: MOV 0, DOWN
MOV 0, RIGHT
JMP R

@6
RESET: MOV 0, DOWN
MOV 2, ACC
SEND: SAV
MOV ACC, LEFT
L: MOV LEFT, ACC
JEZ RESET
SWP
MOV 1, DOWN
ADD DOWN
JMP SEND

@8
MOV ANY, DOWN

@9
MOV UP, LEFT

@10
RESET: MOV UP, ACC
JEZ RESET
MOV 1, UP
MOV UP, ACC
JEZ RESET
MOV 2, UP
ALT: MOV UP, ACC
JEZ RESET
MOV 2, UP
MOV UP, ACC
JEZ RESET
MOV 4, UP
JMP ALT
