"); list($t, $a, $b) = explode(" ",trim(fgets(STDIN))); if ( (max($a, $b) > $t) || (($t == 1) && ($a + $b) == 0) ) { 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 ) { switch ( $wait_count % 3 ) { case 0: $move_string[$i] = substr($move_string[$i-1], 1, 1); $move_string[$i-1] = substr($move_string[$i-1], 0, 1); break; 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;