class program { define half-turn() { turnleft(); turnleft(); } define turnright() { iterate(3) { turnleft(); } } define travel-beepers() { while (nextToABeeper) { move(); } half-turn(); move(); } define spread() { if (nextToABeeper) { pickbeeper(); spread(); move(); putbeeper(); } else { if (facingEast) { half-turn(); move(); move(); travel-beepers(); turnright(); } } } define first-step() { move(); move(); spread(); half-turn(); travel-beepers(); half-turn(); move(); move(); spread(); half-turn(); pickbeeper(); move(); } define copy-step() { if (nextToABeeper) { move(); copy-step(); putbeeper(); move(); } else { half-turn(); move(); if (facingSouth) { turnleft(); copy-step(); half-turn(); move(); turnright(); pickbeeper(); } else { travel-beepers(); turnright(); travel-beepers(); turnleft(); pickbeeper(); } } } define count-steps() { if (nextToABeeper) { pickbeeper(); count-steps(); copy-step(); half-turn(); move(); } else { first-step(); } } program() { pickbeeper(); count-steps(); turnleft(); turnoff(); } }