fn decode(b : bytes) := (26 * 26) * (b[0] - 'A') + 26 * (b[1] - 'A') + (b[2] - 'A'); fn main [ var lines := list_break_to_lines(read_lazy(h[0])); var steps := infinite_repeat(lines[0]); lines := lines[2 .. ]; var a := array_fill(mktuple2(-1, -1), [ipower(26, 3)]); for line in lines do [ var id := decode(line[ .. 3]); var left := decode(line[7 .. 10]); var right := decode(line[12 .. 15]); a[id].v1 := left; a[id].v2 := right; ] var pos := 0; var counter := 0; while pos <> ipower(26, 3) - 1 do [ if steps[0] = 'L' then pos := a[pos].v1; else if steps[0] = 'R' then pos := a[pos].v2; else abort; steps := steps[1 .. ]; counter += 1; ] write(h[1], ntos(counter) + nl); ]