"); list($t, $a, $b) = explode(" ",trim(fgets(STDIN))); if ( max($a, $b) > $t ) { echo 'NO'.PHP_EOL; return; } $move_string = array_fill(0,$t,""); $move_count = 0; $wait_count = 0; for ( $i=0; $i<$t; $i++ ) { $move_count++; // ちょうどまで周辺待機 if ( ($a + $b) == 0 ) { if ( ($t - $move_count) > 0 ) { switch ( $wait_count % 3 ) { case 0: $move_string[$i] .= INPUT_RIGHT; break; case 1: $move_string[$i] .= INPUT_DOWN; break; case 2: $move_string[$i] .= INPUT_LEFT.INPUT_UP; default: break; } $wait_count++; } else { // 周辺待機をしていて、ちょうど目的地にいないとき if (($wait_count != 0) && (($wait_count % 3) != 0)) { switch ( $wait_count % 3 ) { case 1: $move_string[$i] .= INPUT_LEFT; break; case 2: $move_string[$i] .= INPUT_LEFT.INPUT_UP; break; default: break; } } // 周辺待機をしていなくて、ちょうど目的地にいるとき else if ( $wait_count == 0 ) { switch ( $move_string[$i-1] ) { case INPUT_UP.INPUT_RIGHT: $move_string[$i-1] = INPUT_UP; $move_string[$i] = INPUT_RIGHT; break; case INPUT_UP: $move_string[$i-1] .= INPUT_RIGHT; $move_string[$i] = INPUT_LEFT; break; case INPUT_RIGHT: $move_string[$i-1] .= INPUT_UP; $move_string[$i] = INPUT_DOWN; break; default: break; } } // 周辺待機をしていて、ちょうど目的地にいるときは処理必要なし } } // とにかく目標地点まで移動する else { if ( $a ) { $move_string[$i] .= INPUT_UP; $a--; } if ( $b ) { $move_string[$i] .= INPUT_RIGHT; $b--; } } } // 答え出力 echo 'YES'.PHP_EOL; echo implode(PHP_EOL, $move_string).PHP_EOL;