int move(uint32_t maze, int pos, Move move) {
int new_pos += 6*move - 2*(move > 1) - 8;
if (new_pos < 2 || new_pos > 22) return pos;
int idx = (pos + new_pos) / 2;
uint32_t masks[] = {0, 0, 0, 1<<0, 0, 1<<1, 1<<2, 0, 1<<3, 0, 1<<4, 1<<5, 0,
1<<6, 1<<7, 0, 1<<8, 0, 1<<9, 1<<10, 0, 1<<11, 0, 0, 0};
return (maze & masks[idx]) ? pos : new_pos;
}