<?php
while( TRUE ) {
    fscanf(STDIN, "%d", $a);
    if( feof(STDIN) )
        break;
    $c[] = $a;
}
sort($c, SORT_NUMERIC);
foreach(array_slice($c, 0, 3) as $d) {
    echo $d, PHP_EOL;
}

Global OOD problem IDs are disjoint from train, validation, and in-distribution test problem IDs.

List of Top 3 Hills

There is a data which provides heights (in meter) of mountains. The data is only for ten mountains.

Write a program which prints heights of the top three mountains in descending order.

Input

Height of mountain 1
Height of mountain 2
Height of mountain 3
.
.
Height of mountain 10

Constraints

0 ≤ height of mountain (integer) ≤ 10,000

Output

Height of the 1st mountain
Height of the 2nd mountain
Height of the 3rd mountain

Sample Input 1

1819
2003
876
2840
1723
1673
3776
2848
1592
922

Output for the Sample Input 1

3776
2848
2840

Sample Input 2

100
200
300
400
500
600
700
800
900
900

Output for the Sample Input 2

900
900
800

Submitted source-code file size, in bytes.

Execution CPU time reported by official Project CodeNet metadata, in milliseconds.

Peak memory usage reported by official Project CodeNet metadata, in kilobytes.


<?php
    while($input = trim(fgets(STDIN))){
        $hills[] = $input;
    }
    rsort($hills);
    echo $hills[0]."\n";
    echo $hills[1]."\n";
    echo $hills[2]."\n";
?>


Digit Number

Write a program which computes the digit number of sum of two integers a and b.

Input

There are several test cases. Each test case consists of two non-negative integers a and b which are separeted by a space in a line. The input terminates with EOF.

Constraints

0 ≤ a, b ≤ 1,000,000

The number of datasets ≤ 200

Output

Print the number of digits of a + b for each data set.

Sample Input

5 7
1 99
1000 999

Output for the Sample Input

2
3
4


<?php
$line = str_split(trim(fgets(STDIN)));

for($i = 0;$i < count($line);$i++){
    echo $line[count($line)-1-$i];
}
echo "\n";

Reverse Sequence

Write a program which reverses a given string str.

Input

str (the size of str ≤ 20) is given in a line.

Output

Print the reversed str in a line.

Sample Input

w32nimda

Output for the Sample Input

admin23w


Debt Hell

Your friend who lives in undisclosed country is involved in debt. He is borrowing 100,000-yen from a loan shark. The loan shark adds 5% interest of the debt and rounds it to the nearest 1,000 above week by week.

Write a program which computes the amount of the debt in n weeks.

Input

An integer n (0 ≤ n ≤ 100) is given in a line.

Output

Print the amout of the debt in a line.

Sample Input

5

Output for the Sample Input

130000


Sum of 4 Integers

Write a program which reads an integer n and identifies the number of combinations of a, b, c and d (0 ≤ a, b, c, d ≤ 9) which meet the following equality:

a + b + c + d = n

For example, for n = 35, we have 4 different combinations of (a, b, c, d): (8, 9, 9, 9), (9, 8, 9, 9), (9, 9, 8, 9), and (9, 9, 9, 8).

Input

The input consists of several datasets. Each dataset consists of n (1 ≤ n ≤ 50) in a line. The number of datasets is less than or equal to 50.

Output

Print the number of combination in a line.

Sample Input

35
1

Output for the Sample Input

4
4


Prime Number

Write a program which reads an integer n and prints the number of prime numbers which are less than or equal to n. A prime number is a natural number which has exactly two distinct natural number divisors: 1 and itself. For example, the first four prime numbers are: 2, 3, 5 and 7.

Input

Input consists of several datasets. Each dataset has an integer n (1 ≤ n ≤ 999,999) in a line.

The number of datasets is less than or equal to 30.

Output

For each dataset, prints the number of prime numbers.

Sample Input

10
3
11

Output for the Sample Input

4
2
5


MathJax.Hub.Config({ tex2jax: { inlineMath: [["$","$"], ["\\(","\\)"]], processEscapes: true }});

Circumscribed Circle of A Triangle.

Write a program which prints the central coordinate $(p_x, p_y)$ and the radius $r$ of a circumscribed circle of a triangle which is constructed by three points $(x_1, y_1)$, $(x_2, y_2)$ and $(x_3, y_3)$ on the plane surface.

Input

Input consists of several datasets. In the first line, the number of datasets $n$ is given. Each dataset consists of:

$x_1$ $y_1$ $x_2$ $y_2$ $x_3$ $y_3$

in a line. All the input are real numbers.

Output

For each dataset, print $p_x$, $p_y$ and $r$ separated by a space in a line. Print the solution to three places of decimals. Round off the solution to three decimal places.

Constraints

$-100 \leq x_1, y_1, x_2, y_2, x_3, y_3 \leq 100$

$ n \leq 20$

Sample Input

1
0.0 0.0 2.0 0.0 2.0 2.0

Output for the Sample Input

1.000 1.000 1.414


MathJax.Hub.Config({ tex2jax: { inlineMath: [["$","$"], ["\\(","\\)"]], processEscapes: true }});

Integral

Write a program which computes the area of a shape represented by the following three lines:

$y = x^2$

$y = 0$

$x = 600$

It is clear that the area is $72000000$, if you use an integral you learn in high school. On the other hand, we can obtain an approximative area of the shape by adding up areas of many rectangles in the shape as shown in the following figure:

$f(x) = x^2$

The approximative area $s$ where the width of the rectangles is $d$ is:

area of rectangle where its width is $d$ and height is $f(d)$ $+$

area of rectangle where its width is $d$ and height is $f(2d)$ $+$

area of rectangle where its width is $d$ and height is $f(3d)$ $+$

...

area of rectangle where its width is $d$ and height is $f(600 - d)$

The more we decrease $d$, the higer-precision value which is close to $72000000$ we could obtain. Your program should read the integer $d$ which is a divisor of $600$, and print the area $s$.

Input

The input consists of several datasets. Each dataset consists of an integer $d$ in a line. The number of datasets is less than or equal to 20.

Output

For each dataset, print the area $s$ in a line.

Sample Input

20
10

Output for the Sample Input

68440000
70210000


<?php
while (!feof(STDIN)) {
	$input[] = trim(fgets(STDIN));
}

foreach ($input as $value){
	if (!isset($cntMode[$value])){
		$cntMode[$value] = 1;
	} else {
		$cntMode[$value] ++;
	}
}
$min=min($cntMode);
$nums = array_keys($cntMode, $min);
sort($nums);
$result = implode("\n",$nums);
print ($result);
?>

Mode Value

Your task is to write a program which reads a sequence of integers and prints mode values of the sequence.
The mode value is the element which occurs most frequently.

Input

A sequence of integers ai (1 ≤ ai ≤ 100). The number of integers is less than or equals to 100.

Output

Print the mode values. If there are several mode values, print them in ascending order.

Sample Input

5
6
3
5
8
7
5
3
9
7
3
4

Output for the Sample Input

3
5

For example, 3 and 5 respectively occur three times, 7 occurs two times, and others occur only one. So, the mode values are 3 and 5.


<?php
$list = array();
    while(true)
    {
        $list = trim(fgets(STDIN));
        var_dump($list);
        if ($list === '0')
        {
            break;
        }
        if ($list !== ""){
          $array[] = $list;
        }
    }
$list = $array;
$ans = array();
foreach($list as $value){
  $count = 0;
  $check = $value;
  for($i = 0; $i < $value ; $i++){
    if(strpos((string) $check,"4") !== false || strpos((string) $check,"6" !== false)){
      $count++;
    }
  $check--;
  }
  $ans[] = $value - $count;
}
$ans = implode(" ", $ans);
echo $ans;
?>


<?php

$heightAry = array();
while (fscanf(STDIN, '%f', $height) > 0) {
    array_push($heightAry, $height);
};

sort($heightAry);
echo end($heightAry) - $heightAry[0] . PHP_EOL;

標高差

今まで登ったことのある山の標高を記録したデータがあります。このデータを読み込んで、一番高い山と一番低い山の標高差を出力するプログラムを作成してください。

Input

入力は以下の形式で与えられます。

山の高さ
...
...

山の高さが複数行に渡って与えられます。入力される値はすべて 0 以上 1,000,000 以下の実数です。入力される山の高さの数は 50 以下です。

Output

一番高い山と一番低い山の標高差を実数で出力する。出力は0.01以下の誤差を含んでもよい。

Sample Input

3776.0
1819.0
645.2
2004.1
1208.6

Output for the Sample Input

3130.8


<?php

$cup = array(
	"A" => 1,
	"B" => 0,
	"C" => 0
);

while($line = fgets(STDIN)){
	$change = explode(",", $line);
	$change[0] = trim($change[0]);
	$change[1] = trim($change[1]);

	$taihi = $cup[$change[0]];
	$cup[$change[0]] = $cup[$change[1]];
	$cup[$change[1]] = $taihi;
}
echo array_search(1, $cup);

カップゲーム

3 つのカップがふせて置かれています。カップの置かれている場所を、順に A,B,C と呼ぶことにします。最初は A に置かれているカップの中にボールが隠されているとします。カップの位置を入れ替えると、中に入っているボールも一緒に移動します。

入れ替える２つのカップの位置を読み込んで、最終的にどの場所のカップにボールが隠されているかを出力するプログラムを作成してください。

Input

入れ替える２つのカップの位置が順番に複数行にわたり与えられます。各行に、入れ替える２つのカップの位置を表す文字（A, B, または C）がカンマ区切りで与えられます。

入れ替える操作は 50 回を超えません。

Output

ボールが入っているカップの場所（A, B, または C）を１行に出力します。

Sample Input

B,C
A,C
C,B
A,B
C,B

Output for the Sample Input

A


function kaijo($num) {
  if ($num == 0) { return 1; }
  return $num * kaijo($num - 1);
}

echo kaijo(fgets(STDIN));

階乗 II

n! = n × (n − 1) × (n − 2) × ... × 3 × 2 × 1

を n の階乗といいます。例えば、12 の階乗は

12! = 12 × 11 × 10 × 9 × 8 × 7 × 6 × 5 × 4 × 3 × 2 × 1 = 479001600

となり、末尾に 0 が 2 つ連続して並んでいます。

整数 n を入力して、n! の末尾に連続して並んでいる 0 の数を出力するプログラムを作成してください。ただし、n は 20000 以下の正の整数とします。

Input

複数のデータが与えられます。各データに n (n ≤ 20000) が１行に与えられます。n が 0 の時入力の最後とします。

データの数は 20 を超えません。

Output

各データに対して n! の末尾に連続して並んでいる 0 の数を１行に出力して下さい。

Sample Input

2
12
10000
0

Output for the Sample Input

0
2
2499


<?php

while (($line = trim(fgets(STDIN))) !== '') {
    sscanf($line, '%d %d %d', $a, $b, $n);
    $str = sprintf('%.10f', $a / $b);
    $str = substr($str, 2);
    $s = 0;
    //test
    for ($i = 0; $i < $n; $i++) {
        $str[$i];
    }
    echo $s, PHP_EOL;
}

小数位の和

a, b, n は、いずれも正の整数であるとします。分数 a / b の小数第 i 位の数を f(i) とします (0 ≤ f(i) ≤ 9)。このとき、i = 1 から n までの f(i) の和を s とします。

s = f(1) + f(2) + ... + f(n)

a, b, n を読み込んで、 s を出力して終了するプログラムを作成してください。

Input

入力は複数のデータセットからなります。各データセットとして、3 つの整数 a (1 ≤ a ≤ 1000), b (1 ≤ b ≤ 10000), n (1 ≤ n ≤ 100) が空白区切りで１行に与えられます。

データセットの数は 100 を超えません。

Output

データセットごとに、s を１行に出力します。

Sample Input

1 2 3
2 3 4
5 4 3
4 3 2

Output for the Sample Input

5
24
7
6


<?php

while (true) {
    fscanf(STDIN, '%d %d %d', $a, $b, $n);
    if (feof(STDIN)) {
        break;
    }
    $s = 0;
    $mod = $a >= $b ? $a % $b : $a;
    for ($i = 0; $i < $n; $i++) {
        $mod *= 10;
        $s += (int) ($mod / $b);
        $mod = $mod >= $b ? $mod % $b : $mod;
    }
    echo $s . PHP_EOL;
}


<?php
while ($n = rtrim(fgets(STDIN))){

    $temp_colc = [];
    for ($i=0; $i < strlen($n); $i++) {
        $temp_colc[] = intval(substr($n, $i ,1));
        // $temp_colc = $n[$i] + $n[$i + 1];
        // print_r($temp_colc);
    }

    while(count($temp_colc) > 1){
        // 一時的な配列
        $temp_colc2 = [];
        for ($i=0; $i < count($temp_colc) - 1; $i++) {
            $temp_num = ($temp_colc[$i] + $temp_colc[$i + 1]) % 10;
            $temp_colc2[] = $temp_num;
        }
    // 配列に動きをつける。
        $temp_colc = $temp_colc2;
        // print_r($temp_colc);
    }
    print $temp_colc[0];
    print PHP_EOL;
}

一番下の行の数字は?

次のような数字のパターンを作ることを考えます。

4 8 2 3 1 0 8 3 7 6
2 0 5 4 1 8 1 0 3
2 5 9 5 9 9 1 3
7 4 4 4 8 0 4
1 8 8 2 8 4
9 6 0 0 2
5 6 0 2
1 6 2
7 8
5

このパターンは以下の規則に従っています。

A B
C

という数字の並びにおいて、C は A + B の 1 の位の数字である。たとえば、

9 5
4

では、9 + 5 = 14 の 1 の位の数字、すなわち 4 が 9 と 5 の斜め下に並べられます。また、

2 3
5

では、2 + 3 = 5 の 1 の位の数字、すなわち 5 が 2 と 3 の斜め下に並べられます。

一番上の行の 10 個の整数を読み込んで、一番下の行の 1 個の数を出力するプログラムを作成してください。

Input

入力は複数のデータセットからなります。各データセットとして、一番上の行の 10 個の数字が文字列として１行に与えられます。

データセットの数は 20 を超えません。

Output

データセットごとに、一番下の行の数字を１行に出力します。

Sample Input

4823108376
1234567890
0123456789

Output for the Sample Input

5
6
4


<?php

function reCalc($level, $k, $n, $s){
	if($level >= $n){
		// 計算
		$w = 0;
		for($i = 0; $i < $n; $i++){
			$w += $k[$i]*($i + 1);
		}
		if($w == $s){
			return 1;
		}else{
			return 0;
		}
	}

	$cnt = 0;
	for($i = 0; $i <= 9; $i++){
		if(array_search($i, $k) !== false){
			continue;
		}
		$k[$level] = $i;
		$cnt += reCalc($level+1, $k, $n, $s);
	}

	return $cnt;
}

while($line = fgets(STDIN)){
	$arr = explode(" ", $line);
	$n = intval($arr[0]);
	$s = intval($arr[1]);

	$k = array();
	$cnt = reCalc(0, $k, $n, $s);

	echo $cnt."\n";
}

Combination of Number Sequences

0 から 9 までの整数を使った n 個の数の並び k1, k2, ..., kn を考えます。正の整数 n と s を読み込んで、

k1 + 2 × k2 + 3 × k3 + ... + n × kn = s

となっているような n 個の数の並びが何通りあるかを出力するプログラムを作成してください。ただし、1 つの「n 個の数の並び」には同じ数が 2 回以上現われないものとします。

Input

入力は複数のデータセットからなります。各データセットとして、n (1 ≤ n ≤ 10) と s (0 ≤ s ≤ 10,000)が空白区切りで１行に与えられます。

データセットの数は 100 を超えません。

Output

データセットごとに、n 個の整数の和が s になる組み合わせの個数を１行に出力します。

Sample Input

3 10
3 1

Output for the Sample Input

8
0


<?php
// Here your code !
$moji = fgets(STDIN);

$waketa = preg_split('/[,.\s]/', $moji);

$renketu = '';
foreach ($waketa as $value) {
    if (strlen($value)>=3 && strlen($value)<=6) {
        $renketu = $renketu.$value.' ';
    }
}
printf($renketu."\n");

?>

検索エンジン

インターネットの検索エンジン、例えば、Google などでは、世界中のウェブページを自動で収捨して分類し、巨大なデータベースを作成します。また、ユーザが入力した検索キーワードを解析して、データベース検索のための問い合わせ文を作成します。

いずれの場合も、効率的な検索を実現するために複雑な処理を行っていますが、とりあえずの基本は全て文章からの単語の切り出しです。

ということで、文章からの単語の切り出しに挑戦してください。今回は以下の通り、単語区切りが明確な英語の文章を対象とします。

対象となる文章　：　改行を含まない 1024 文字以下の英語の文章

区切り文字 ：　いずれも半角で空白、ピリオド、カンマのみ

切り出す単語　：　3 から 6 文字の単語（2文字以下や7文字以上の単語は無視）

入力

区切り文字及び英数字で構成される英文が１行（すべて半角）に与えられます。

出力

空白文字１文字（半角）で区切られた単語を１行に出力してください。

Sample Input

Rain, rain, go to Spain.

Output for the Sample Input

Rain rain Spain

Sample Input 2

Win today's preliminary contest and be qualified to visit University of Aizu.

Output for the Sample Input 2

Win and visit Aizu


<?php
$input = trim(fgets(STDIN));
$input = explode(" ", $input);

foreach ($input as $mozi) {
    if (strlen($mozi) <= 6 && strlen($mozi) >= 3) {
        printf($mozi." ");
    }
}


<?php
$moji = trim(fgets(STDIN));

$waketa = preg_split('/[,.\s]/', $moji);

$renketu = '';
foreach ($waketa as $value) {
    if (strlen($value)>=3 && strlen($value)<=6) {
        $renketu = $renketu.$value.' ';
    }
}
if ($renketu!="") {
    $renketu=substr($renketu, 0, -1);

}
echo $renketu."\n";
?>


シールの重なり

1 辺の長さが 10 の正方形の折り紙に半径 1 の円形のシールを n 枚貼ります。シールは重ねて貼ることができます。シールを貼る位置の座標を読み込んで、折り紙上でもっとも多くシールが重なっている場所(シールが１枚だけでも"重なっている"とする)でのシールの枚数を出力するプログラムを作成してください。

折り紙の左下を原点とした x, y 座標を与えます。この x, y を円の中心としてシールを貼ることとします。円の中心が折り紙の外に出ることはありません。また、同一座標に複数のシールが貼られることはありません。

Input

複数のデータセットが与えられます。各データセットは以下のような形式で与えられます。

n
x1,y1
x2,y2
:
xn,yn

１行目にシールの枚数 n (0 ≤ 100) が与えられます。続く n 行に、各シールの中心座標が与えられます。
xi, yi は i 枚目のシールの中心の x 座標と y 座標を表します。各値は小数点以下最大 6 桁までの数字を含む実数で与えられます。

n が 0 のとき、入力の最後とします。データセットの数は 50 を超えません。

Output

各データセットに対し、折り紙上で最も多くシールが重なっている場所でのシールの枚数（整数）を出力して下さい。

Sample Input

15
3.14979,8.51743
2.39506,3.84915
2.68432,5.39095
5.61904,9.16332
7.85653,4.75593
2.84021,5.41511
1.79500,8.59211
7.55389,8.17604
4.70665,4.66125
1.63470,4.42538
7.34959,4.61981
5.09003,8.11122
5.24373,1.30066
0.13517,1.83659
7.57313,1.58150
0

Output for the Sample Input

4

Hint

入力例のようにシールを貼った図です。円はシール、数字は入力例の行数を表しています。
点(2.3,4.6)では、入力例の 2 行目、3 行目、6 行目、10 行目の 4 枚のシールが重なっています。

6 と 9 のおのおのの中心の距離は 2.01293 なので、シールは重なっていません。1 と 12 のおのおのの中心の距離は 1.98231 なので、シールは重なっています。

２つの円が接しているとき（おのおのの中心の距離が 2 のとき）は、重なっているものとします。


坪面積の計算

土地の面積を表現する「○○坪」という単位を聞いたことはないでしょうか？ 古来、１人の武士が１日に食べるお米を作る面積を言いました。

a［m］× b［m］の土地があります。a と b を入力し、その土地の坪面積 S［坪］を出力するプログラムを作成してください。 1 坪 = 3.305785 [m2] とし、a と b は 100 以下の整数とします。

入力

a b

１つの空白で区切られた a と b が１行に与えられる。

出力

坪面積 S を１行に出力する。0.0001 以下の誤差が許される。

入力例1

15 25

出力例1

113.437508


４つの整数の和 II

4,000 以下の正の整数 n を入力し、0 〜 1000 の範囲の整数 a, b, c, d の組で

a + b + c + d = n

を満たすものの組み合わせ数を出力するプログラムを作成して下さい。

Input

複数のデータセットが与えられます。各データセットに n が１行に与えられます。入力の最後まで処理して下さい。

データセットの数は 50 を超えません。

Output

各データセットごとに、a, b, c, d の組み合わせの個数を１行に出力して下さい。

Sample Input

2
3
35

Output for the Sample Input

10
20
8436


<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

//$fp = fopen("input.txt", "r");
$fp = fopen("php://stdin", "r");
$n = (int)fgets($fp);

for($i = 0; $i < $n; $i++) {
    $buf = rtrim(fgets($fp));
    for($j = 0; $j < strlen($buf)-6; $j++) {
        if(isHoshino($buf, $j) ) $buf[$j+6] = 'a';
    }
    echo $buf;
    if($i < $n - 1) echo "\n";
}

function isHoshino($str, $pos) {
    if($str[$pos] != 'H') {
        return false;
    }
    if($str[$pos+1] != 'o') {
        return false;
    }
    if($str[$pos+2] != 's') {
        return false;
    }
    if($str[$pos+3] != 'h') {
        return false;
    }
    if($str[$pos+4] != 'i') {
        return false;
    }
    if($str[$pos+5] != 'n') {
        return false;
    }
    if($str[$pos+6] != 'o') {
        return false;
    }
    return true;
}
?>

Aizu PR

An English booklet has been created for publicizing Aizu to the world.
When you read it carefully, you found a misnomer (an error in writing) on the last name of Masayuki Hoshina, the lord of the Aizu domain. The booklet says "Hoshino" not "Hoshina".

Your task is to write a program which replace all the words "Hoshino" with "Hoshina". You can assume that the number of characters in a text is less than or equal to 1000.

Input

The input consists of several datasets. There will be the number of datasets n in the first line. There will be n lines. A line consisting of english texts will be given for each dataset.

Output

For each dataset, print the converted texts in a line.

Sample Input

3
Hoshino
Hashino
Masayuki Hoshino was the grandson of Ieyasu Tokugawa.

Output for the Sample Input

Hoshina
Hashino
Masayuki Hoshina was the grandson of Ieyasu Tokugawa.


<?php
while((list($h, $w) = explode(" ", trim(fgets(STDIN)))) && $h && $w) {
    $field = array();
    for($i = 0; $i < $h; $i++) {
        foreach(str_split(trim(fgets(STDIN))) as $dir) {
            $field[$i][] = new Tile($dir);
        }
    }
    $person = new Person(0, 0);
    $flg = false;
    while(($dir = $field[$person->getY()][$person->getX()]->getDir()) != null) {
        if($flg = $person->move($dir)) {
            break;
        }
    }
    echo $flg ? $person->showPos() : "LOOP", PHP_EOL;
}

class Tile {
    private $flg_;
    private $dir_;

    function __construct($dir) {
        $this->flg_ = false;
        $this->dir_ = $dir;
    }

    function getDir() {
        if($this->flg_) {
            return null;
        } else {
            $this->flg_ = true;
            return $this->dir_;
        }
    }
}

class Person {
    private $y_;
    private $x_;

    function __construct($y, $x) {
        $this->y_ = $y;
        $this->x_ = $x;
    }

    function move($dir) {
        switch($dir) {
          case "v":
            $this->y_++;
            return false;
          case "^":
            $this->y_--;
            return false;
          case ">":
            $this->x_++;
            return false;
          case "<":
            $this->x_--;
            return false;
          case ".":
            return true;
        }
    }

    function getY() {
        return $this->y_;
    }

    function getX() {
        return $this->x_;
    }

    function showPos() {
        echo $this->x_, " ", $this->y_;
    }
}

Magic Tile

There is a magic room in a homestead. The room is paved with H × W tiles. There are five different tiles:

Tile with a east-pointing arrow

Tile with a west-pointing arrow

Tile with a south-pointing arrow

Tile with a north-pointing arrow

Tile with nothing

Once a person steps onto a tile which has an arrow, the mystic force makes the person go to the next tile pointed by the arrow. If the next tile has an arrow, the person moves to the next, ans so on. The person moves on until he/she steps onto a tile which does not have the arrow (the tile with nothing). The entrance of the room is at the northwest corner.

Your task is to write a program which simulates the movement of the person in the room. The program should read strings which represent the room and print the last position of the person.

The input represents the room as seen from directly above, and up, down, left and right side of the input correspond to north, south, west and east side of the room respectively. The horizontal axis represents x-axis (from 0 to W-1, inclusive) and the vertical axis represents y-axis (from 0 to H-1, inclusive). The upper left tile corresponds to (0, 0).

The following figure shows an example of the input:

10 10
>>>v..>>>v
...v..^..v
...>>>^..v
.........v
.v<<<<...v
.v...^...v
.v...^<<<<
.v........
.v...^....
.>>>>^....

Characters represent tiles as follows:

'>': Tile with a east-pointing arrow
'<': Tile with a west-pointing arrow
'^': Tile with a north-pointing arrow
'v': Tile with a south-pointing arrow
'.': Tile with nothing

If the person goes in cycles forever, your program should print "LOOP". You may assume that the person never goes outside of the room.

Input

The input consists of multiple datasets. The input ends with a line which contains two 0. Each dataset consists of:

H W
H lines where each line contains W characters

You can assume that 0 < W, H < 101.

Output

For each dataset, print the coordinate (X, Y) of the person or "LOOP" in a line. X and Y should be separated by a space.

Sample Input

10 10
>>>v..>>>v
...v..^..v
>>>>>>^..v
.........v
.v<<<<...v
.v.v.^...v
.v.v.^<<<<
.v.v.....v
.v...^...v
.>>>>^....
6 10
>>>>>>>>>v
.........v
.........v
>>>>v....v
^...v....v
^<<<<<<<<<
0 0

Output for the Sample Input

5 7
LOOP


<?php

fscanf(STDIN, '%d', $n);
for ($i = 0; $i < $n; $i++) {
    $str = str_replace('=', '', trim(fgets(STDIN)));
    //括弧は1つだけと想定
    if (preg_match('/\(.+\)/', $str, $matches)) {
        $str2 = substr($matches[0], 1, -1);
        $str = str_replace($matches[0], calc($str2), $str);
    }
    echo calc($str), PHP_EOL;
}

function calc($str)
{
    while (preg_match('|[*/]|', $str, $matches, PREG_OFFSET_CAPTURE)) {
        $ope = $matches[0][0];
        $pos = $matches[0][1];
        $a = '';
        $b = '';
        $i = $pos - 1;
        $j = $pos + 1;

        while (true) {
            $bool1 = @ctype_digit($str[$i]);
            $bool2 = @ctype_digit($str[$j]);
            if (!$bool1 && !$bool2) {
                break;
            }

            if ($bool1) {
                $a = $str[$i] . $a;
                $i--;
            }

            if ($bool2) {
                $b .= $str[$j];
                $j++;
            }
        }

        $result = $ope === '*' ? (int)($a * $b) : (int)($a / $b);
        $str = substr($str, 0, $i + 1) . $result . substr($str, $j);
    }

    $arr = array();
    $n = '';
    for ($i = 0, $len = strlen($str); $i < $len; $i++) {
        $ch = $str[$i];
        if (ctype_digit($ch)) {
            $n .= $ch;
        } else {
            $arr[] = (int)$n;
            $n = $ch;
        }
    }
    $arr[] = (int)$n;

    return array_sum($arr);
}

Smart Calculator

Your task is to write a program which reads an expression and evaluates it.

The expression consists of numerical values, operators and parentheses, and the ends with '='.

The operators includes +, - , *, / where respectively represents, addition, subtraction, multiplication and division.

Precedence of the operators is based on usual laws. That is one should perform all multiplication and division first, then addition and subtraction. When two operators have the same precedence, they are applied from left to right.

You may assume that there is no division by zero.

All calculation is performed as integers, and after the decimal point should be truncated

Length of the expression will not exceed 100.

-1 × 109 ≤ intermediate results of computation ≤ 109

Input

The input is a sequence of datasets. The first line contains an integer n which represents the number of datasets. There will be n lines where each line contains an expression.

Output

For each datasets, prints the result of calculation.

Sample Input

2
4-2*3=
4*(8+4+3)=

Output for the Sample Input

-2
60


<?php
while(true){
    //??\???
    list($manCount) = stdInput();
    if ($manCount == 0){
        exit;
    }

    $array = [];
    for ($i=0;$i<$manCount;$i++){
        $array = array_merge($array,stdInput());
    }

    //??????????????¨
    sort($array);
    $count=0;
    $answer=0;
    $countArray = [];
    for($i=0;$i<$manCount-1;$i++){
        $count+=$array[$i];
        $answer+=$count;
    }

    // ??????
    echo $answer,PHP_EOL;
}

// ??¢??°
function stdInput(){
    return explode(" ", trim(fgets(STDIN)));
}

ミルクショップ

鈴木さんは会津地域に新しく搾りたてミルクの移動販売のお店を開きました。その日買い求めに来るお客さんは全員持ち帰るためのボトルを持って既にお店に並んでいて、それ以上増えないものとします。お客さんはそれぞれ1回だけしか注文しません。タンクの蛇口が一つしかないので、一人ずつ順番に販売しなければなりません。そこで、鈴木さんはなるべく並んでいるお客さんの待ち時間を少なくしたいと考えています。

お客さんの人数とお客さんが牛乳を注ぎきるのに要する時間が入力として与えられます。あなたはお客さんの「一人一人の待ち時間の合計」(以下「待ち時間の合計」とする)を最小にするための注文の順序を鈴木さんに代わって調べ、そのときの「待ち時間の合計」を出力して終了するプログラムを作成してください。ただし、お客さんは 10,000 人以下で 1 人あたりに要する時間は 60 分以下とします。

例えば、お客さんの人数が 5 人で、各お客さんが要する時間が順に 2,6,4,3,9 分の場合、そのままの順序だと「待ち時間の合計」は 37 分になります。次の例では、最初の列の順の 2 人目と 3 人目を入れ替えています。この場合、「待ち時間の合計」は 35 分になります。最適な順序だと 31 分で済みます。

待ち時間

1 人目 2 分

0 分

2 人目 6 分

2 分

3 人目 4 分

8 分

4 人目 3 分

12 分

5 人目 9 分

15 分

37 分

← 「待ち時間の合計」

2 人目と 3 人目を入れ替えた例

待ち時間

1 人目 2 分

0 分

2 人目 4 分

2 分

3 人目 6 分

6 分

4 人目 3 分

12 分

5 人目 9 分

15 分

35 分

← 「待ち時間の合計」

Input

複数のデータセットが与えられます。各データセットは以下の形式で与えられます。

n
t1
t2
:
tn

1 行目にお客さんの人数 n (n ≤ 10,000) が与えられます。続く n 行に i 人目のお客さんが要する時間を表す整数 ti (0 ≤ ti ≤ 60) がそれぞれ１行に与えられます。

入力は１つの 0 を含む行で終わります。データセットの数は 50 を超えません。

Output

各データセットごとに、待ち時間の合計(整数)を１行に出力してください。

Sample Input

5
2
6
4
3
9
0

Output for the Sample Input

31


<?php
	function main(){
		$max_x = 1000000;
		$max_n = 30;
		$prime = check_prime($max_x);
		while(1){
			$stdin = trim(fgets(STDIN));
			$arr = explode(' ', $stdin);
			$n = $arr[0]; $x = $arr[1];

			if ($n == 0 && $x == 0){
				break;
			}

			for ($i=0; $i<$n; $i++){
				$stdin = trim(fgets(STDIN));
				$fprice[$i] = $stdin;
			}

			$comb = comb($n, $x, $fprice);
			solve($x, $prime, $comb);
		}
	}
	main();

	function check_prime($max_x){
	  $num = 0;
	  $max = $max_x + 1; // 配列を、 1 origin で考える。

	  $array = array();
	  $array[1] = false;

	  for ($i=2; $i<$max; $i++) {
	    if (isset($array[$i])){
	    }else{
	      $array[$i] = true;
		  for ($j=$i*2; $j<$max; $j+=$i) {
		      $array[$j] = false;
		  }
		}
	  }
	  return $array;
	}

	function comb($n, $x, $fprice){
		for ($i=1; $i<=$x; $i++) {
		  $comb[$i] = false;
		}
		$comb[0] = true;
		for($i=0; $i<$n; $i++){
			for($j=0; $j+$fprice[$i]<=$x; $j++){
				if($comb[$j]==true){
					$comb[ $j+$fprice[$i] ] = true;
				}
			}
		}
		return $comb;
	}

	function solve($x, $array, $comb){
		$max_ans = 0;
		for ($i=1; $i<=$x; $i++) {
			if ($array[$i]===true && $comb[$i]===true){
				$max_ans = $i;
			}
		}
		echo $max_ans;
		echo PHP_EOL;
	}

上司のおごり

会津太郎さんの会社には、割り切れない事が大嫌いな上司がいます。太郎さんがその上司と食事に行くときは、割り勘で会計をしているのですが、支払金額が参加人数で割り切れないときは、いつも上司がおごってくれています。

ある日、太郎さんは食事会の幹事になりました。お金の少ない太郎さんは、その上司を誘ってなんとかおごってもらえるように出来ないか考えました。もう料理屋に注文をしなければならないのですが、まだ何人参加するかは分からないので、どんな人数が参加してもおごってもらえるような注文をしておきたいようです。太郎さんの同期で、同じく食事会に参加する予定のあなたは、太郎さんに協力して、予算額以下で最大のどんな人数でも割り切れない金額を算出することにしました。

料理の種類、各料理の料金、予算額を入力とし、予算額以下で最大のどんな数字でも割り切れない合計金額(ただし、 1 と合計金額は除く)を出力するプログラムを作成してください。なお、各種類の料理は複数個注文できますが、全種類の料理を注文する必要はありません。ただし、このような合計金額がない場合は、 NA と出力してください。

Input

複数のデータセットの並びが入力として与えられます。 入力の終わりはゼロふたつの行で示されます。
各データセットは以下の形式で与えられます。

n x
v1
v2
:
vn

1 行目に料理の種類 n (1 ≤ n ≤ 30) と予算額 x (1 ≤ x ≤ 1000000) が空白区切りで与えられます。続くn 行に i 種類目の料理の金額を表す整数 vi (1 ≤ vi ≤ 1000000) が与えられます。

データセットの数は 100 を超えません。

Output

入力データセットごとに、予算額に最も近い合計金額、または NA を１行に出力します。

Sample Input

4 15000
305
260
129
500
3 400
10
20
30
3 200909
5
9
12
0 0

Output for the Sample Input

14983
NA
200909


<?php
$list = array();
    while(true)
    {
        $list = trim(fgets(STDIN));
        if ($list === '0')
        {
            break;
        }
        if ($list !== ""){
          $array[] = $list;
        }
    }
$list = $array;
$ans = array();
foreach($list as $value){
  $count = 0;
  $check = $value;
  $ans[] = $value + $count;
}
$ans = implode("\n", $ans);
echo $ans;
?>

病院の部屋番号

ウォーターデブンに住む建築家のデブンキーさんのもとに、古い大病院を改装する仕事の依頼が舞い込んできました。

国によっては忌み数(いみかず)として嫌われる数字を部屋番号に用いたくない人がいます(日本では 4 と 9 が有名です)。しかし、この病院の部屋番号は忌み数に関係なく、1 から順番に付けられていました。

それが気になったデブンキーさんは、機材やベッドの入れ替えが全て終わる前にウォーターデブンの忌み数である「4」と「6」を除いた数字で部屋番号を付けなおしてしまいました。しかし、入れ替え作業は旧部屋番号で計画していたので、残りの作業を確実に行うには旧部屋番号を新部屋番号に変換する必要があります。計算が苦手なデブンキーさんはこのことに気づいて愕然としています。

そんなデブンキーさんのために、旧部屋番号を入力とし対応する新部屋番号を出力するプログラムを作成してください。

15 番目までの部屋番号の対応表は以下のようになります。

旧部屋番号

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

新部屋番号

1

2

3

5

7

8

9

10

11

12

13

15

17

18

19

Input

複数のデータセットの並びが入力として与えられます。入力の終わりはゼロひとつの行で示されます。
各データセットとして、旧部屋番号を表す整数 n (1 ≤ n ≤ 1,000,000,000) が１行に与えられます。

データセットの数は 30000 を超えません。

Output

入力データセットごとに、新部屋番号を１行に出力します。

Sample Input

15
100
1000000000
3
0

Output for the Sample Input

19
155
9358757000
3


<?php

$file_handle = fopen('php://stdin', "r");	//fopen()は同位フォルダにファイルがあればその名前のみでOK
//$file_handle = fopen('aoj0235_in.txt', "r");

//dfs（再帰ver）(根から葉の親までの距離総計を$leafに格納していく)
function dfs($cur) {
	//グローバル変数定義
	global $dist;
	global $leaf;

	//終了条件不要

    $childnode = childnode($cur['node']);
    //print_r($childnode);
    if (empty( $childnode )) return;
    foreach ($childnode as $island_num => $distance) {
	    $grandchildnode = childnode($island_num);
	    //print_r($grandchildnode);
        if (!empty($grandchildnode)) {
        	$new['node'] = $island_num;
    		$new['parent'] = $cur['node'];
    		$new['dist'] = $cur['dist'] + $dist[$cur['node']][$new['node']];
    		dfs($new);
        } else {
        	$leaf[$cur['node']] = $cur['dist'];		//ここが葉の親ならば
        	$dist[$cur['node']][$island_num] = 0;	//バグの修正。孫ノードが存在しない橋への距離を０に。
        }
    }
}

//子ノード抽出
function childnode($island){
	global $dist;
   //数字の大きい島のみ子ノードとして取り出す
   $childnode = array();
   if (!empty($dist[$island])){
	   foreach ($dist[$island] as $key => $val){
	       if ($island < $key){
	       		$childnode[$key] = $val;
	       }
	   }
   }
   return $childnode;
}

//最も根から葉の親までの距離が大きいものを取り出す
function max_dist($leaf){
	$max = 0;
	foreach ($leaf as $key => $val){
		if ($max < $leaf[$key]){
			$max = $leaf[$key];
		}
	}
	return $max;
}

function calc(){
	global $dist;
	global $leaf;
	global $max_dist;
	//まずは葉の親までの全部の橋のコストを合計して2倍。
	$sum = 0;
	foreach($dist as $key => $val){
		//if (isset($leaf[$key])) continue;	//バグの原因。葉の親から経由するルートの場合バグに。
		foreach($dist[$key] as $d2){
			$sum += $d2;
		}
	}
	$sum = $sum*2;

	//$sum から、根から葉の親までの距離が最も大きいものをマイナス
	$sum -= $max_dist;
	return $sum;
}

while (1){
	//変数の初期化
	$dist = array();
	$leaf = array();	//$leaf[葉の親のnum] = 根からの距離

	//ファイル読み込み
	$stdin = fscanf($file_handle, '%d');	//fscanf()で読み込んだものは配列として格納される
	$n = $stdin[0];
	//終了条件
	if ($n == 0){
		break;
	}

	for ($i=0; $i < $n-1; $i++){
		$info = fscanf($file_handle, '%d %d %d');
		$parent = $info[0]; $child = $info[1]; $distance = $info[2];
		if ($parent < $child){
			$dist[$parent][$child] = $distance;
		} else {
			$dist[$child][$parent] = $distance;
		}
	}

	//探索
	$stack['node'] = 1;		//スタートを$stackに入れて開始
	$stack['parent'] = NULL;
	$stack['dist'] = 0;
	dfs($stack);
	$max_dist = max_dist($leaf);
	$sum = calc();

	//print_r($leaf);

	//出力
	if (isset($sum)){
		echo $sum;
	} else {
		echo 'ERROR';
	}
	echo PHP_EOL;
}

fclose($file_handle);

サージェント・ライアン

「ライアン軍曹を救え」という指令のもと、アイヅ軍の救出部隊はドイツリーの水上都市で敵軍と激しい戦闘を繰り広げていました。彼らは無事に軍曹と合流しましたが、敵の戦車が多く、救出ヘリを呼べずにいました。そこで、彼らは敵の戦車を混乱させるため、都市にある橋を全て爆破するという作戦を実行することにしました。

作戦はすぐに司令部に伝えられ、救出ヘリの準備が進められました。救出ヘリを飛ばすためには、いつ橋が全て爆破されるかを予測しなければなりません。軍のプログラマであるあなたの任務は、救出部隊が全ての橋の爆破に必要な時間を計算することです。

水上都市は N 個の島で構成されており、島と島との間には橋がかかっています。すべての島はツリー状に繋がっています(下図参照) 。ある島からある島への経路は、一通りだけ存在します。各橋を渡るには、橋ごとに決められた時間がかかり、どちらの方向にもその時間で橋を渡ることが可能です。

救出部隊はボートなど水上を移動する手段を持っていないので島と島の間を移動するには橋を通る他ありません。救出部隊は、その時いる島に隣接している橋のうち、必要なものを一瞬で爆破することができます。救出部隊が全ての橋を爆破するのに必要な最小の時間はいくらでしょうか。ただし、島の中での移動時間は考えません。

島の数、それぞれの橋情報を入力とし、橋を全て爆破するのに必要な最小の時間を出力するプログラムを作成してください。島はそれぞれ 1 から N の番号で表されます。橋は N-1 本あります。橋情報は、その橋が隣接している二つの島の番号(a, b)と、その橋を渡るのに必要な時間 t で構成されます。救出部隊は島番号 1 の島からスタートするものとします。

Input

複数のデータセットの並びが入力として与えられる。入力の終わりはゼロひとつの行で示される。各データセットは以下の形式で与えられる。

N
a1 b1 t1
a2 b2 t2
:
aN-1 bN-1 tN-1

入力はすべて整数で与えられる。1 行目に島の数 N (2 ≤ N ≤ 20) が与えられる。

続く N-1 行に i 番目の橋の情報が与えられる。 ai, bi, ti (1 ≤ ti ≤ 500) は、i 番目の橋を通って島 ai と島 bi の間を時間 ti で移動できることを表す。

データセットの数は 100 を超えない。

Output

データセットごとに、橋を全て爆破するのに必要な最小の時間を1行に出力する。

Sample Input

7
1 2 5
2 3 2
3 4 3
2 5 3
5 6 3
5 7 8
0

Output for the Sample Input

12


<?php

$file_handle = fopen('php://stdin', "r"); //fopen()は同位フォルダにファイルがあればその名前のみでOK
//$file_handle = fopen('aoj0235_in.txt', "r");

//dfs（再帰ver）(根から葉の親までの距離総計を$leafに格納していく)
function dfs($cur) {
    //グローバル変数定義
    global $dist;
    global $leaf;
    global $flag;

    //終了条件不要

    //現在の島を探索済みにする
    $flag[$cur['node']] = 1;

    $childnode = childnode($cur['node']);
    if (empty( $childnode )) return;
    foreach ($childnode as $island_num => $distance) {
    	if ( $flag[$island_num] === 1 ) continue;
        $grandchildnode = childnode($island_num);
        if (!empty($grandchildnode)) {
            $new['node'] = $island_num;
            $new['dist'] = $cur['dist'] + $dist[$cur['node']][$new['node']];
            dfs($new);
        } else {
            $leaf[$cur['node']] = $cur['dist'];     //ここが葉の親ならば
            $dist[$cur['node']][$island_num] = 0;   //バグの修正。孫ノードが存在しない橋への距離を０に。
            $dist[$island_num][$cur['node']] = 0;   //バグの修正。孫ノードが存在しない橋への距離を０に。
        }
    }
}

//子ノード抽出
function childnode($island){
    global $dist;
    global $flag;
   //未探索のみ子ノードとして取り出す
   $childnode = array();
   if (!empty($dist[$island])){
       foreach ($dist[$island] as $key => $val){
           if ($flag[$key] !== 1) {
               $childnode[$key] = $val;
           }
       }
   }
   return $childnode;
}

//最も根から葉の親までの距離が大きいものを取り出す
function max_dist($leaf){
    $max = 0;
    foreach ($leaf as $key => $val){
        if ($max < $leaf[$key]){
            $max = $leaf[$key];
        }
    }
    return $max;
}

function calc(){
    global $dist;
    global $leaf;
    global $max_dist;
    //まずは葉の親までの全部の橋のコストを合計して2倍。もともとダブルカウントなので全部足し算すればOK
    $sum = 0;
    foreach($dist as $key => $val){
        foreach($dist[$key] as $d2){
            $sum += $d2;
        }
    }

    //$sum から、根から葉の親までの距離が最も大きいものをマイナス
    $sum -= $max_dist;
    return $sum;
}

while (1){
    //変数の初期化
    $dist = array();
    $leaf = array();    //$leaf[葉の親のnum] = 根からの距離
    $flag = array();	//探索済みかどうか

    //ファイル読み込み
    $stdin = fscanf($file_handle, '%d');    //fscanf()で読み込んだものは配列として格納される
    $n = $stdin[0];
    //終了条件
    if ($n == 0){
        break;
    }

    for ($i=0; $i < $n-1; $i++){
        $info = fscanf($file_handle, '%d %d %d');
        $parent = $info[0]; $child = $info[1]; $distance = $info[2];
        $dist[$parent][$child] = $distance;
        $dist[$child][$parent] = $distance;
    }

    for ($i=1; $i<=$n; $i++){
    	$flag[$i] = 0;	//すべての島を未探索に。
    }

    //探索
    $stack['node'] = 1;     //スタートを$stackに入れて開始
    $stack['parent'] = NULL;
    $stack['dist'] = 0;
    dfs($stack);
    $max_dist = max_dist($leaf);
    $sum = calc();

    //出力
    echo $sum;
    echo PHP_EOL;
}

fclose($file_handle);


<?php
while(true) {
  $k = trim(fgets(STDIN));
  if ($k == 0) {
    break;
  }

  $year = trim(fgets(STDIN));

  $motoris = array();
  for ($i =0; $i < $k; ++$i) {
    $a = explode(' ', fgets(STDIN));
    if ($a[2] == 1) {
      $motoris[$a[0]] = (1 + $year * ($a[1] / 100));
    } else {
      $motoris[$a[0]] = pow(1 + ($a[1] / 100), $year);
    }
  }

  arsort($motoris);
  $b = array_keys($motoris);
  echo $b[0] . PHP_EOL;

}

金利計算

金利は銀行に預けているお金に付き、その計算方法や利率は銀行によって様々です。利息と元金を合わせたものを元利と呼びますが、元利の計算方法として、利息を元金に組み入れずに計算する「単利」と利息を元金に組み入れて計算する「複利」というものがあり、より多くの元利を得るためにはこの差異を理解していなければなりません。元利の計算方法は以下のようになります。

銀行の数、お金を預ける年数、各銀行の情報（銀行番号、金利の種類、年利率（パーセント））を入力とし、最も元利が高くなる銀行番号を出力するプログラムを作成してください。ただし、最も元利が高くなる銀行は一つだけです。

入力

複数のデータセットが与えられます。入力の終わりはゼロひとつで示されます。各データセットは以下の形式で与えられます。

n
y
b1 r1 t1
b2 r2 t2
:
bn rn tn

1行目に銀行の数 n (1 ≤ n ≤ 50)、2行目にお金を預ける年数 y (1 ≤ y ≤ 30)が与えられます。続くn 行に i 番目の銀行の銀行番号 bi、年利率を表す整数 ri (1 ≤ ri ≤ 100)、 金利の種類 ti (1 または 2) が与えられます。金利の種類 ti は、単利の場合は1、複利の場合は2で与えられます。

データセットの数は 100 を超えません。

出力

データセットごとに、最も元利が高くなる銀行番号を１行に出力します。

入力例

2
8
1 5 2
2 6 1
2
9
1 5 2
2 6 1
0

出力例

2
1


<?php
$stdins = array();
    while(true)
    {
        $stdin = trim(fgets(STDIN));
        if ($stdin === '0')
        {
          foreach($return as $value) {
            echo $value . "\n\r";
          }
            return;
        } else {
          $n = (int)$stdin;
          $y = (int)trim(fgets(STDIN));
          $max = 0;
          $num = null;
          for ($n ; 0 < $n; $n--) {
            list($b, $r, $t) = explode(' ', trim(fgets(STDIN)));
            if ($t === '1') {
              $money = 1+$y*(int)$r/100;
            } else {
              $money = pow(1+((int)$r/100), $y);
            }
            if ($max < $money) {
              $max = $money;
              $num = $b;
            }
          }

          $return[] = $num;

        }
        $stdins[] = $stdin;
    }
?>


MathJax.Hub.Config({ tex2jax: { inlineMath: [["$","$"], ["\\(","\\)"]], processEscapes: true }});

有理式最大化

N 個の異なる自然数が与えられる。その中から異なる４つを選んで、それらを $A$, $B$, $C$, $D$ としたとき、次の数式

$\frac{A + B}{C - D}$

の最大値を求めたい。

N 個の異なる自然数が与えられたとき、その中から異なる４つを選んで、上の数式の最大値を求めるプログラムを作成せよ。

Input

入力は以下の形式で与えられる。

N
a1 a2 ... aN

１行目に自然数の個数 N (4 ≤ N ≤ 1000) が与えられる。２行目に各自然数の値 ai (1 ≤ ai ≤ 108) が与えられる。ただし、同じ自然数が重複して現れることはない（i ≠ j について ai ≠ aj)。

Output

与えられた N 個の自然数に対して、上の数式の最大値を実数で出力する。ただし、誤差がプラスマイナス 10-5 を超えてはならない。

Sample Input 1

10
1 2 3 4 5 6 7 8 9 10

Sample Output 1

19.00000

入力例１では、$A=9$, $B=10$, $C=2$, $D=1$ などの組み合わせで最大になる。

Sample Input 2

5
22 100 42 3 86

Sample Output 2

9.78947

入力例２では、$A=100$, $B=86$, $C=22$, $D=3$ などの組み合わせで最大になる。

Sample Input 3

6
15 21 36 10 34 5

Sample Output 3

18.00000

入力例３では、$A=21$, $B=15$, $C=36$, $D=34$ などの組み合わせで最大になる。

Sample Input 4

4
100000 99999 8 1

Sample Output 4

28571.285714


<?php
$input=explode(' ',trim(fgets(STDIN)));
$a=intval($input[0]);
$b=intval($input[1]);
$money=($a+$b)/2;
echo $money;
?>

Handsel

Alice and Brown are brothers in a family and each receives pocket money in celebration of the coming year. They are very close and share the total amount of the money fifty-fifty. The pocket money each receives is a multiple of 1,000 yen.

Write a program to calculate each one’s share given the amount of money Alice and Brown received.

Input

The input is given in the following format.

a b

A line of data is given that contains two values of money: a (1000 ≤ a ≤ 50000) for Alice and b (1000 ≤ b ≤ 50000) for Brown.

Output

Output the amount of money each of Alice and Brown receive in a line.

Sample Input 1

1000 3000

Sample Output 1

2000

Sample Input 2

5000 5000

Sample Output 2

5000

Sample Input 3

1000 2000

Sample Output 3

1500


<?php
$rep_count = trim(fgets(STDIN));
for ($i = 0; $i < $rep_count; $i++) {
    list($before, $after) = explode(' ', trim(fgets(STDIN)));
    $rep_words[] = array('before' => $before, 'after' => $after);
}

$string_count = trim(fgets(STDIN));
for ($i = 0; $i < $string_count; $i++) {
    $string[] = trim(fgets(STDIN));
}
$done = [];
$string = implode($string);
for ($i = 0; $i < count($rep_words); $i++) {
    if (in_array($rep_words[$i]['after'], $done)) {
        continue;
    }
    $string = str_replace($rep_words[$i]['before'], $rep_words[$i]['after'], $string);
    $done[] = $rep_words[$i]['after'];
}
echo $string . PHP_EOL;

与えられた変換表にもとづき，データを変換するプログラムを作成しなさい．

データに使われている文字は英字か数字で，英字は大文字と小文字を区別する．変換表に現れる文字の順序に規則性はない．

変換表は空白をはさんで前と後ろの 2 つの文字がある(文字列ではない)．変換方法は，変換表のある行の前の文字がデータに現れたら，そのたびにその文字を後ろの文字に変換し出力する．変換は 1 度だけで，変換した文字がまた変換対象の文字になっても変換しない．変換表に現れない文字は変換せず，そのまま出力する．

入力ファイルには，変換表（最初の n + 1 行）に続き変換するデータ（n + 2 行目以降）が書いてある． 1 行目に変換表の行数 n，続く n 行の各行は，空白をはさんで 2 つの文字，さらに続けて， n + 2 行目に変換するデータの行数 m，続く m 行の各行は 1 文字である． m ≤ 105 とする．出力は，出力例のように途中に空白や改行は入れず 1 行とせよ．

入力例

3

A a

0 5

5 4

10

A

B

C

0

1

4

5

a

b

A

出力例

aBC5144aba

入力

入力は複数のデータセットからなる．n が 0 のとき入力が終了する．データセットの数は 5 を超えない．

出力

データセットごとに、変換後の文字列を１行に出力する．

入力例

3
A a
0 5
5 4
10
A
B
C
0
1
4
5
a
b
A
3
A a
0 5
5 4
10
A
B
C
0
1
4
5
a
b
A
0

出力例

aBC5144aba
aBC5144aba

各データセットの出力（変換後の文字列）の後に改行を入れること．

上記問題文と自動審判に使われるデータは、情報オリンピック日本委員会が作成し公開している問題文と採点用テストデータです。


<?php
        $data_set = array();
        $data = array();

        for($loop_cnt = 0; $loop_cnt < 5; $loop_cnt++)
        {
                // 変換表数設定
                $input_n = trim(fgets(STDIN));
                if( 0 == $input_n)
                {
                        break;
                }

                // 変換表設定
                for($loop_n = 0; $loop_n < $input_n; $loop_n++)
                {
                        $input_conv = explode( " " , trim(fgets(STDIN)) );

                        $data_set = $data_set + array( $input_conv[0] => $input_conv[1]) ;
                }

                // データ数設定
                $input_m = trim(fgets(STDIN));

                // データ設定
                for($loop_m = 0; $loop_m < $input_m; $loop_m++)
                {
                        $input_data =trim(fgets(STDIN));
                        $data = array_merge( $data , array($input_data) );
                }

                // 変換後出力
                for($loop_m = 0; $loop_m < $input_m; $loop_m++)
                {
                        if( array_key_exists( $data[$loop_m] , $data_set ) )
                        {
                                $work[] = $data_set[ $data[$loop_m] ];
                        }
                        else
                        {
                                $work[] = $data[$loop_m];
                        }
                }
                echo implode('',$work);
                echo "\n";

        };
?>


<?php
$a = trim(fgets(STDIN));
$b = trim(fgets(STDIN));
$c = trim(fgets(STDIN));
$d = trim(fgets(STDIN));
$e = trim(fgets(STDIN));
if($a < 0){
  $heat  = abs($a) * $c;
  $heat_time =  $e * $b;
  $time = $heat + $heat_time + $d;
  echo $time.PHP_EOL;
}else{
    $heat = $b - $a;
     $time = $heat * $e;
     echo $time.PHP_EOL;
}
?>

電子レンジ (Microwave)

問題

JOI 君は食事の準備のため，A ℃の肉を電子レンジで B ℃まで温めようとしている．
肉は温度が 0 ℃未満のとき凍っている．
また，温度が 0 ℃より高いとき凍っていない．
温度がちょうど 0 ℃のときの肉の状態は，凍っている場合と，凍っていない場合の両方があり得る．

JOI 君は，肉の加熱にかかる時間は以下のようになると仮定して，肉を温めるのにかかる時間を見積もることにした．

肉が凍っていて，その温度が 0 ℃より小さいとき： C 秒で 1 ℃温まる．

肉が凍っていて，その温度がちょうど 0 ℃のとき： D 秒で肉が解凍され，凍っていない状態になる．

肉が凍っていないとき： E 秒で 1 ℃温まる．

この見積もりにおいて，肉を B ℃にするのに何秒かかるかを求めよ．

入力

入力は 5 行からなり，1 行に 1 個ずつ整数が書かれている．

1 行目には，もともとの肉の温度 A が書かれている．

2 行目には，目的の温度 B が書かれている．

3 行目には，凍った肉を 1 ℃温めるのにかかる時間 C が書かれている．

4 行目には，凍った肉を解凍するのにかかる時間 D が書かれている．

5 行目には，凍っていない肉を 1 ℃温めるのにかかる時間 E が書かれている．

もともとの温度 A は -100 以上 100 以下，目的の温度 B は 1 以上 100 以下であり，A ≠ 0 および A < B を満たす．

温めるのにかかる時間 C, D, E はすべて 1 以上 100 以下である．

出力

肉を B ℃にするのにかかる秒数を 1 行で出力せよ．

入出力例

入力例 1

-10
20
5
10
3

出力例 1

120

入力例 2

35
92
31
50
11

出力例 2

627

入出力例 1 では，もともとの肉は -10 ℃で凍っている．かかる時間は以下のようになる．

-10 ℃から 0 ℃まで温めるのに 5 × 10 = 50 秒．

0 ℃の肉を解凍するのに 10 秒．

0 ℃から 20 ℃まで温めるのに 3 × 20 = 60 秒．

したがって，かかる時間の合計は 120 秒である．

入出力例 2 では，もともとの肉は凍っていない．したがって，肉を 35 ℃から 92 ℃まで温めるのにかかる時間は 627 秒である．

情報オリンピック日本委員会作 『第 16 回日本情報オリンピック JOI 2016/2017 予選競技課題』


<?php
$ans = array();
while ($n = trim(fgets(STDIN))) {
  if ($n == '0') { break; }
  $names = array();
  $displays = array();
  $displayCount = array();
  $points = array();
}

Problem A: Popularity Estimation

あなたはとあるアニメーション制作会社の企画部長である。昨今のアニメーション制作会社が制作するものは、アニメーションそのものにとどまらない。関連商品、例えば登場キャラクターのフィギュアやキャラクターソングCDなども、重要な収益源なのである。この収益をどれだけ伸ばせるかは、ひとえに企画部長のあなたにかかっているのであった。

当たり前のことだが、こういった関連商品は闇雲に発売すればいいというものではない。商品の開発には多くの時間と予算が必要なためだ。アニメの登場キャラクターのフィギュアを発売するにしても、多くの売上が見込まれる、人気があるキャラクターのものに限らなければならない。

キャラクターの人気度を測る手段の一つが、人気投票である。あなたも今までいくつかの人気投票を企画してきたが、どうやら視聴者はこの企画に不満を抱きつつあるようだ。人気度を測る他の手法の確立が急務である。

そこであなたは、ひとつの仮説を立てた。あるキャラクターの人気度は、そのアニメ本編中における登場時間の総和に比例する、というものだ。あなたはこの仮説を検証するため、それぞれのキャラクターの登場時間を集計するプログラムを書くことにした。

Input

入力は複数のケースからなる。
各ケースは以下のフォーマットで与えられる。

n
name0 m0 d0,0 ... d0,m0-1
name1 m1 d1,0 ... d1,m1-1
.
.
.
namen-1 mn-1 dn-1,0 ... dn-1,mn-1-1

n はキャラクターの人数を表す。

namei はキャラクターの名前を表す。

mi はキャラクターが映っていた時刻の種類を表す。

mi の後にはmi 個の整数di,j が与えられる。

di,jはキャラクターが映っていた時刻を表す。

入力の終わりはn=0 からなる行によって与えられる

ある時刻に1人のキャラクターのみが画面に映っていた場合、そのキャラクターはnポイントを得ることが出来る。

同時刻に映るキャラクターが1人増える毎に、その時刻に映っていたキャラクターが得られるポイントは1減る。

n人のキャラクターが同時刻に映っていた場合、n人の人それぞれに1ポイントが加算される。

入力は以下の制約を満たす。

2 ≤ n ≤ 20

0 ≤ mi ≤ 30

0 ≤ di,j < 30

i 番目のキャラクターについてdi,j はすべて異なる。

namei はアルファベットの大文字または小文字のみを含み、長さは10以下である。

Output

最小のポイントを持つキャラクターのポイントとその名前を1つの空白で区切って出力せよ。

最小のポイントを持つキャラクターが複数いる場合は名前が辞書順で最小の人を選ぶこと。

Sample input

4
akzakr 2 1 8
fnmyi 5 2 3 4 6 9
tsnukk 5 2 3 4 7 9
yskwcnt 6 3 4 7 8 9 10
4
akzakr 1 2
fnmyi 3 10 11 12
tsnukk 2 1 8
yskwcnt 2 1 8
5
knmmdk 2 13 19
akmhmr 4 13 15 19 22
mksyk 6 3 7 12 13 15 19
skrkyk 3 1 4 8
tmemm 3 1 17 24
5
knmmdk 5 5 6 16 18 26
akmhmr 9 3 4 7 11 14 15 17 18 20
mksyk 5 6 13 25 27 28
skrkyk 4 3 16 23 24
tmemm 3 6 12 20
14
hrkamm 6 4 6 8 10 20 22
mkhsi 6 1 10 12 15 22 27
hbkgnh 2 4 9
chyksrg 8 3 4 12 15 16 20 25 28
mktkkc 6 0 1 8 15 17 20
tknsj 6 6 8 18 19 25 26
yyitktk 3 3 12 18
ykhhgwr 5 3 9 10 11 24
amftm 7 2 6 8 12 13 14 17
mmftm 4 6 12 16 18
rtkakzk 3 14 15 21
azsmur 7 1 2 4 12 15 18 20
iormns 2 4 20
ktrotns 6 7 12 14 17 20 25
14
hrkamm 2 4 21
mkhsi 6 2 3 8 11 18 20
hbkgnh 4 4 16 28 29
chyksrg 5 0 3 9 17 22
mktkkc 2 7 18
tknsj 3 3 9 23
yyitktk 3 10 13 25
ykhhgwr 2 18 26
amftm 3 13 18 22
mmftm 4 1 20 24 27
rtkakzk 2 1 10
azsmur 5 2 5 10 14 17
iormns 3 9 15 16
ktrotns 5 7 12 16 17 20
0

Sample output

7 akzakr
4 akzakr
6 knmmdk
12 tmemm
19 iormns
24 mktkkc

The University of Aizu Programming Contest 2011 Summer

原案: Tomoya Sakai

問題文: Takashi Tayama


Problem A: ICPC Score Totalizer Software

The International Clown and Pierrot Competition (ICPC), is one of the
most distinguished and also the most popular events on earth in the
show business.

One of the unique features of this contest is the great number of
judges that sometimes counts up to one hundred. The number of judges
may differ from one contestant to another, because judges with any
relationship whatsoever with a specific contestant are temporarily
excluded for scoring his/her performance.

Basically, scores given to a contestant's performance by the judges
are averaged to decide his/her score. To avoid letting judges with
eccentric viewpoints too much influence the score, the highest and the
lowest scores are set aside in this calculation. If the same highest
score is marked by two or more judges, only one of them is ignored.
The same is with the lowest score. The average, which may contain
fractions, are truncated down to obtain final score as an integer.

You are asked to write a program that computes the scores of
performances, given the scores of all the judges, to speed up the event
to be suited for a TV program.

Input

The input consists of a number of datasets, each corresponding to a
contestant's performance. There are no more than 20 datasets in the input.

A dataset begins with a line with an integer n, the number of
judges participated in scoring the performance (3 ≤ n ≤
100). Each of the n lines following it has an integral
score s (0 ≤ s ≤ 1000) marked by a judge. No
other characters except for digits to express these numbers are in the
input. Judges' names are kept secret.

The end of the input is indicated by a line with a single zero in it.

Output

For each dataset, a line containing a single decimal integer
indicating the score for the corresponding performance should be
output. No other characters should be on the output line.

Sample Input

3
1000
342
0
5
2
2
9
11
932
5
300
1000
0
200
400
8
353
242
402
274
283
132
402
523
0

Output for the Sample Input

342
7
300
326


Problem A: Next Mayor

One of the oddest traditions of the town of Gameston may be that even
the town mayor of the next term is chosen according to the result of a game.
When the expiration of the term of the mayor approaches, at least
three candidates, including the mayor of the time, play a game of
pebbles, and the winner will be the next mayor.

The rule of the game of pebbles is as follows.
In what follows, n is the number of participating candidates.

Requisites

A round table, a bowl, and plenty of pebbles.

Start of the Game

A number of pebbles are put into the bowl;
the number is decided by the Administration Commission using
some secret stochastic process.
All the candidates, numbered from 0 to n-1 sit around the round table,
in a counterclockwise order. Initially, the bowl is handed to the
serving mayor at the time, who is numbered 0.

Game Steps

When a candidate is handed the bowl and if any pebbles are in it,
one pebble is taken out of the bowl and is
kept, together with those already at hand, if any.
If no pebbles are left in the bowl, the candidate puts
all the kept pebbles, if any, into the bowl. Then, in either case, the bowl is
handed to the next candidate to the right.

This step is repeated until the winner is decided.

End of the Game

When a candidate takes the last pebble in the bowl, and no other
candidates keep any pebbles, the game ends and that candidate with all
the pebbles is the winner.

A math teacher of Gameston High, through his analysis, concluded that this game will always end within a finite number of steps, although the number of required steps can be very large.

Input

The input is a sequence of datasets. Each dataset is a line
containing two integers n and p separated by a single
space. The integer n is the number of the candidates including
the current mayor, and the integer p is the total number of the
pebbles initially put in the bowl. You may assume 3 ≤ n ≤ 50
and 2 ≤ p ≤ 50.

With the settings given in the input datasets, the game will end within 1000000 (one million) steps.

The end of the input is indicated by a line
containing two zeros separated by a single space.

Output

The output should be composed of lines corresponding to input datasets
in the same order, each line of which containing the candidate number
of the winner.
No other characters should appear in the output.

Sample Input

3 2
3 3
3 50
10 29
31 32
50 2
50 50
0 0

Output for the Sample Input

1
0
1
5
30
1
13


Problem A: Nasty Boys

Problem

太郎君は学校のロッカーに大事な本を隠しているので他の人よりとても厳重に管理していて、学校で支給された鍵に加えて以下のようなボタン認証式の鍵を設置しています。

ただパスワードを忘れやすい太郎くんはパスワードを一筆書きで書けるものにしてしまう癖があります。更に詰めの甘い太郎君は自分のパスワードを考えるときに候補を紙に書いていました。その紙をたまたま拾ったは次郎君は、性格が悪いので捨てずにロッカーを開けることに挑戦しました。

しかし紙にはなんと1000個ものパスワードの案が書かれており、全ての入力を試すと日が暮れてしまいそうです。
そこで太郎君の癖を知っている次郎君は、調べる回数を減らすために1000個のパスワードの中から一筆書きできるものだけを取り上げることにして、その作業をプログラマーの貴方に頼むことにしました。

1つのデータセットにつき必ず候補は一つ以上存在します。一筆書きのルールを以下に示します。

同じ文字は連続しない。例えばAAAは許されない。

上下左右4方向に一筆書きが可能。斜め方向に移動しない。

ボタン配列の枠外に出て連続することはない。例えばABCAのような移動は許されない。

一度通った文字の上も何度も通過可能。

ボタン1文字のみの入力も一筆書きとみなす。

Input

入力は以下のように1000個の文字列群からなり、各行はAからIまでの1文字以上10文字以下の大文字のアルファベット列である。それぞれ文字列のデータの重複はないものとする。

string1
string2
...
string1000

Output

入力のうち候補となるパスワード（candidatePassword）のみ抜き出して以下のように列挙せよ。なお以下の場合はN個の候補が挙げられている。

candidatePassword1
candidatePassword2
...
candidatePasswordN

出力は入力の文字列の順と同じであり順番を入れ替えてはならない。

Sample Input

ABCFI
ABCABCABC
AEI
EFC
（中略）
DEHED
EEEEE
（以上でちょうど1000個）

Sample Output

ABCFI
EFC
（中略）
DEHED


#include<cstdio>
#include<iostream>
#include<string>
#define rep(X,Y) for(int (X)=0;(X)<(Y);++(X))

typedef long long ll;

using namespace std;

int main(){
  ll n,b,c,a,x;
  while(cin>>n>>a>>b>>c>>x){
    if(!n)break;
    int cnt=0,ub=10000;
    ll y;
    rep(i,n){
      cin>>y;
      while(x!=y){
	x=(a*x%c+b)%c;
	if(++cnt>ub){cnt=-1;break;}
      }
      if(cnt<0)break;
      if(i!=n-1){x=(a*x%c+b)%c; ++cnt;}
    }
    cout<<cnt<<endl;
  }
}

Problem A: Luck Manipulator

Nathan O. Davis くんは，あるゲームを攻略中であり，非常にレアなアイテムを手に入れようと四苦八苦していた．このレアなアイテムは，カジノのスロットマシーンで特殊な絵柄を一列に揃えたときに手に入れることができる．スロットマシーンには N 個のリールがあり，ボタンを一回押すと現在回転している最も左側のリールが停止する．そのため，このレアアイテムを手に入れるためには N 回ボタンを押す必要がある．また，特殊な絵柄で停止させるためにはあるタイミングでボタンを押す必要がある．ところが，このボタンを押すタイミングは非常にシビアであるため，なかなか上手くいかずに困っていた．そこで，Nathan くんはメモリビューアを利用して，ゲーム中におけるメモリの値を確認しながらゲームを解析することにした．

Nathan くんの解析の結果，その特殊な絵柄でリールを停止させるためには，ボタンが押された時に，メモリの 007E0D1F 番地に書き込まれた「乱数」が特定の値になっている必要があることを突き止めた．乱数の値は 1 フレーム毎に線形合同法によって変化しており，またボタンが押されたかどうかの判定は 1 フレーム毎に 1 回行われていることも分かった．ここで，線形合同法とは擬似乱数を生成するための方法の一つであり，以下の式によって値を決定する．

x' = (A × x + B) mod C

ここで，x は現在の乱数の値，x' は次の乱数の値，A, B, C は何らかの定数である．また，y mod z は y を z で割ったときの余りを表す．

例えば，2 個のリールを持つスロットマシーンで A = 5，B = 7，C = 11 で，最初の「乱数」の値が 10 であったとする．そして，特殊な絵柄でリールを止めるための条件は，左側のリールが 2，右側のリールが 4 であったとする．このとき，1 フレーム目における乱数の値は (5 × 10 + 7) mod 11 = 2 であるため，1 フレーム目にボタンを押せば左側のリールは特殊な絵柄で停止する．続く 2 フレーム目での乱数の値は (5 × 2 + 7) mod 11 = 6 であるから，2 フレーム目にボタンを押しても右側のリールは特殊な絵柄では停止しない．続く 3 フレーム目では乱数の値が (5 × 6 + 7 ) mod 11 = 4 になるので，3 フレーム目にボタンを押せば右側のリールは特殊な絵柄で停止する．よって，最短 3 フレームで全てのリールを特殊な絵柄で停止されることができ，レアなアイテムを手に入れることができる．

あなたの仕事は，最短で何フレーム目に全てのリールを特殊な絵柄で停止させることができるかを求めるプログラムを書いて，Nathan くんがレアなアイテムを手に入れられるよう助けてあげることである．

Input

入力は複数のデータセットからなる．各データセットは次の形式で与えられる．

N A B C X

Y1 Y2 ... YN

最初の行には 5 つの整数 N (1 ≤ N ≤ 100) ，A, B (0 ≤ A, B ≤ 10,000)，C (1 ≤ C ≤ 10,000) ，X (0 ≤ X < C) がそれぞれ 1 つの空白文字で区切られて与えられる．ここで，X は最初の乱数の値を表す．続く行では，N 個の整数 Y1, Y2, ... , YN (0 ≤ Yi ≤ 10,000) が 1 つの空白文字で区切られて与えられる．これらは，リールを特定の絵柄で止めるための条件を表しており，その第 i 番目の数 Yi は，左から i 番目のリールを特殊な絵柄で停止するためには，乱数の値が Yi である必要がある，いう意味である．

入力の終わりは，空白で区切られた 5 つの 0 を含む 1 行で示される．

Output

各データセットについて，特殊な絵柄で停止させるために必要となる最短のフレーム数を 1 行に出力せよ．なお，10,000 フレーム以内に停止させることができない場合は，フレーム数の代わりに -1 を出力せよ．出力に余計な空白や改行を含めてはならない．

Sample Input

1 5 7 11 10
10
2 5 7 11 10
2 4
2 1 1 256 0
128 255
2 0 0 1 0
1234 5678
2 1 1 100 0
99 98
2 1 1 100 0
99 99
2 1 1 10000 0
1 0
2 1 1 10000 0
2 1
0 0 0 0 0

Output for the Sample Input

0
3
255
-1
198
199
10000
-1


MathJax.Hub.Config({ tex2jax: { inlineMath: [["$","$"], ["\\(","\\)"]], processEscapes: true }});

Longest Common Subsequence

For given two sequences $X$ and $Y$, a sequence $Z$ is a common subsequence of $X$ and $Y$ if $Z$ is a subsequence of both $X$ and $Y$. For example, if $X = \{a,b,c,b,d,a,b\}$ and $Y = \{b,d,c,a,b,a\}$, the sequence $\{b,c,a\}$ is a common subsequence of both $X$ and $Y$. On the other hand, the sequence $\{b,c,a\}$ is not a longest common subsequence (LCS) of $X$ and $Y$, since it has length 3 and the sequence $\{b,c,b,a\}$, which is also common to both $X$ and $Y$, has length 4. The sequence $\{b,c,b,a\}$ is an LCS of $X$ and $Y$, since there is no common subsequence of length 5 or greater.

Write a program which finds the length of LCS of given two sequences $X$ and $Y$. The sequence consists of alphabetical characters.

Input

The input consists of multiple datasets. In the first line, an integer $q$ which is the number of datasets is given. In the following $2 \times q$ lines, each dataset which consists of the two sequences $X$ and $Y$ are given.

Output

For each dataset, print the length of LCS of $X$ and $Y$ in a line.

Constraints

$1 \leq q \leq 150$

$1 \leq$ length of $X$ and $Y$ $\leq 1,000$

$q \leq 20$ if the dataset includes a sequence whose length is more than 100

Sample Input 1

3
abcbdab
bdcaba
abc
abc
abc
bc

Sample Output 1

4
3
2

Reference

Introduction to Algorithms, Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein. The MIT Press.


<?php
    $fnum = trim(fgets(STDIN));
    $snum = trim(fgets(STDIN));
    $farray = str_split($fnum);
    $sarray = str_split($snum);

    foreach ($farray as $fkey => $fvalue) {
        if ($fvalue == $sarray[0]) {
            $count = 0;
            while ($count < count($sarray) && ($fkey + $count) < count($farray)) {
                if ($farray[$fkey + $count] != $sarray[$count]) break;
                $count++;
            }
            if ($count == count($sarray)) echo $fkey."\n";
        }
    }

Naive String Search

Find places where a string P is found within a text T.

Print all indices of T where P found. The indices of T start with 0.

Input

In the first line, a text T is given. In the second line, a string P is given.

output

Print an index of T where P found in a line. Print the indices in ascending order.

Constraints

1 ≤ length of T ≤ 1000

1 ≤ length of P ≤ 1000

The input consists of alphabetical characters and digits

Sample Input 1

aabaaa
aa

Sample Output 1

0
3
4

Sample Input 2

xyzz
yz

Sample Output 2

1

Sample Input 3

abc
xyz

Sample Output3

The ouput should be empty.


<?php

function input_array() {
    return explode(' ', trim(fgets(STDIN)));
}

function gcd($x, $y) {
    if ($x < $y) {
        list($x, $y) = [$y, $x];
    }
    while ($y !== 0) {
        list($x, $y) = [$y, $x % $y];
    }
    return $x;
}

list($x, $y) = array_map(function($numeric_string) {
    return (int)$numeric_string;
}, input_array());

echo gcd($x, $y) . "\n";

Greatest Common Divisor

Write a program which finds the greatest common divisor of two natural numbers a and b

Input

a and b are given in a line sparated by a single space.

Output

Output the greatest common divisor of a and b.

Constrants

1 ≤ a, b ≤ 109

Hint

You can use the following observation:

For integers x and y, if x ≥ y, then gcd(x, y) = gcd(y, x%y)

Sample Input 1

54 20

Sample Output 1

2

Sample Input 2

147 105

Sample Output 2

21


<?php
function isPrime($num, $n) {
    if ($num == 2) {
        return true;
    } elseif ( $num < 2 or $num % 2 == 0) {
        return false;
    } else {
        $start = 3;
        while ($start <= sqrt($num) + 1) {
            if ($num % $start == 0) {
                return false;
            }
            $start += 2;
        }
        return true;
    }
}

$n = trim(fgets(STDIN));
$count = 0;

for ($i = 0; $i < $n; $i++) {
    $number = (int) fgets(STDIN);
    if (isPrime($number, $n)) $count++;
}

echo $count . PHP_EOL;

Prime Numbers

A prime number is a natural number which has exactly two distinct natural number divisors: 1 and itself. For example, the first four prime numbers are: 2, 3, 5 and 7.

Write a program which reads a list of N integers and prints the number of prime numbers in the list.

Input

The first line contains an integer N, the number of elements in the list.

N numbers are given in the following lines.

Output

Print the number of prime numbers in the given list.

Constraints

1 ≤ N ≤ 10000

2 ≤ an element of the list ≤ 108

Sample Input 1

5
2
3
4
5
6

Sample Output 1

3

Sample Input 2

11
7
8
9
10
11
12
13
14
15
16
17

Sample Output 2

4


<?php
function isPrime( $x )
{
    if( 2 == $x ) return true;
    if( 0 == $x%2 ) return false;
    for( $i=3; $i*$i<=$x; $i++ ) {
        if( 0 == $x%$i ) { return false; }
    }
    return true;
}
	$n = trim( fgets( STDIN ) );
	$cnt = 0;
	$primes = [];
	while( $n-- ) {
		$num = trim( fgets( STDIN ) );
		if(  FALSE !== array_search( $num, $primes ) || isPrime( $num ) ) {
			array_push( $primes, $num );
			$cnt++;
		}
	}
	print $cnt;
?>


<?php
	$n = trim( fgets( STDIN ) );
	$nums = [];
	for( $i=0; $i<$n; $i++ ) {
		array_push( $nums, intval( trim( fgets( STDIN ) ) ) );
	}
	$cnt = $n;
	$end = max( $nums );
	for( $i=2; $i*$i<=$end; $i++ ) {
		for( $j=0; $j<$n; $j++ ) {
			if( $nums[$j] && 0 == $nums[$j]%$i )  {
				if( $nums[$j] != $i ) {
					$cnt--;
				}
				$nums[$j] = false;
			}
		}
	}
	print $cnt;
?>


<?php
fscanf(STDIN,'%d',$length);
$line = trim(fgets(STDIN));
$arr = explode(' ',$line);

$times=0;
for($i=0;$i<$length;$i++) {
  $min=$i;
  for($j=$i;$j<$length;$j++) {
    if($arr[$j]<$arr[$min]){
      $min=$j;
    }
  }
  if($min==$i){
    continue;
  }
  $temp=$arr[$i];
  $arr[$i]=$arr[$min];
  $arr[$min]= $temp;
  $times++;
}

echo implode(' ',$arr), PHP_EOL,$times;

Selection Sort

Write a program of the Selection Sort algorithm which sorts a sequence A in ascending order. The algorithm should be based on the following pseudocode:

SelectionSort(A)
1 for i = 0 to A.length-1
2 mini = i
3 for j = i to A.length-1
4 if A[j] < A[mini]
5 mini = j
6 swap A[i] and A[mini]

Note that, indices for array elements are based on 0-origin.

Your program should also print the number of swap operations defined in line 6 of the pseudocode in the case where i ≠ mini.

Input

The first line of the input includes an integer N, the number of elements in the sequence.

In the second line, N elements of the sequence are given separated by space characters.

Output

The output consists of 2 lines.

In the first line, please print the sorted sequence. Two contiguous elements of the sequence should be separated by a space character.

In the second line, please print the number of swap operations.

Constraints

1 ≤ N ≤ 100

Sample Input 1

6
5 6 4 2 1 3

Sample Output 1

1 2 3 4 5 6
4

Sample Input 2

6
5 2 4 6 1 3

Sample Output 2

1 2 3 4 5 6
3


<?php
function calc($p1, $p2, $c) {
  switch($c) {
    case "+":
      return $p1 + $p2;
      break;
    case "-":
      return $p1 - $p2;
      break;
    case "*":
      return $p1 * $p2;
      break;
  }
  return 0;
}

function RPN($A) {
  $arr = array();
  while($v = array_shift($A)) {
    if (ctype_digit($v)) {
      $arr[] = intval($v);
    } else {
      if (count($arr) >= 2) {
        $p2 = array_pop($arr);
        $v = calc(array_pop($arr), $p2, $v);
        $arr[] = $v;
      }
    }
  }
  return $arr[0];
}

$A = explode(' ', trim(fgets(STDIN)));
echo(RPN($A));

?>

Reverse Polish notation is a notation where every operator follows all of its operands. For example, an expression (1+2)*(5+4) in the conventional Polish notation can be represented as 1 2 + 5 4 + * in the Reverse Polish notation. One of advantages of the Reverse Polish notation is that it is parenthesis-free.

Write a program which reads an expression in the Reverse Polish notation and prints the computational result.

An expression in the Reverse Polish notation is calculated using a stack. To evaluate the expression, the program should read symbols in order. If the symbol is an operand, the corresponding value should be pushed into the stack. On the other hand, if the symbols is an operator, the program should pop two elements from the stack, perform the corresponding operations, then push the result in to the stack. The program should repeat this operations.

Input

An expression is given in a line. Two consequtive symbols (operand or operator) are separated by a space character.

You can assume that +, - and * are given as the operator and an operand is a positive integer less than 106

Output

Print the computational result in a line.

Constraints

2 ≤ the number of operands in the expression ≤ 100

1 ≤ the number of operators in the expression ≤ 99

-1 × 109 ≤ values in the stack ≤ 109

Sample Input 1

1 2 +

Sample Output 1

3

Sample Input 2

1 2 + 3 4 - *

Sample Output 2

-3

Notes

Template in C


<?php
class Que{
  public $data=[];
  public $size=100000;
  public $head=0;
  public $tail=0;
  function init(){$this->head=$this->tail=0;}
  function isEmpty(){return $this->head==$this->tail;}
  function isFull(){return $this->head==($this->tail+1)%$this->size;}
  function push($x){
    if($this->isFull()) return false;
    $t=$this->tail;
    if(++$this->tail==$this->size) $this->tail=0;
    $this->data[$t]=$x;
  }
  function shift(){
    if($this->isEmpty()) return false;
    $h=$this->head;
    if(++$this->head==$this->size) $this->head=0;
    return $this->data[$h];
  }
}
$que=new Que();
list($N,$Q)=explode(' ',trim(fgets(STDIN)));
for($i=0;$i<$N;$i++) $que->push(explode(' ',trim(fgets(STDIN))));
$TIME=0;
while(!$que->isEmpty()){
  $task=$que->shift();
  if($task[1]<=$Q){
    echo $task[0],' ',$TIME+$task[1],PHP_EOL;
    $TIME+=$task[1];
  }
  else{
    $task[1]-=$Q;
    $que->push($task);
    $TIME+=$Q;
  }
}

There are n processes in a queue. Each process has namei and timei. The round-robin scheduling handles the processes in order. A round-robin scheduler gives each process a quantum (a time slot) and interrupts the process if it is not completed by then. The process is resumed and moved to the end of the queue, then the scheduler handles the next process in the queue.

For example, we have the following queue with the quantum of 100ms.

A(150) - B(80) - C(200) - D(200)

First, process A is handled for 100ms, then the process is moved to the end of the queue with the remaining time (50ms).

B(80) - C(200) - D(200) - A(50)

Next, process B is handled for 80ms. The process is completed with the time stamp of 180ms and removed from the queue.

C(200) - D(200) - A(50)

Your task is to write a program which simulates the round-robin scheduling.

Input

n q

name1 time1

name2 time2

...

namen timen

In the first line the number of processes n and the quantum q are given separated by a single space.

In the following n lines, names and times for the n processes are given. namei and timei are separated by a single space.

Output

For each process, prints its name and the time the process finished in order.

Constraints

1 ≤ n ≤ 100000

1 ≤ q ≤ 1000

1 ≤ timei ≤ 50000

1 ≤ length of namei ≤ 10

1 ≤ Sum of timei ≤ 1000000

Sample Input 1

5 100
p1 150
p2 80
p3 200
p4 350
p5 20

Sample Output 1

p2 180
p5 400
p1 450
p3 550
p4 800

Notes

Template in C


<?php

class Simulator
{
    public $queue = array();
    public $n_processes;
    public $quantum;

    public function __construct()
    {
        fscanf(STDIN, "%d", $this->n_processes);
        while ($this->n_processes > 0) {
            fscanf(STDIN, "%s %s", $operation, $key);
            $this->doOperation($operation, $key);
            $this->n_processes -= 1;
        }
    }

    public function doOperation($operation, $key)
    {
        switch ($operation) {
            case 'insert':
                array_unshift($this->queue, $key);
                break;
            case 'delete':
                // unset($this->queue[array_search($key, $this->queue)]);
                $i = 0;
                while (1) {
                    if ($this->queue[$i] == $key) {
                        unset($this->queue[$i]);
                        break;
                    }
                }
                // unset($this->queue[$a[0]]);
                break;
            case 'deleteFirst':
                unset($this->queue[0]);
                break;
            case 'deleteLast':
                array_pop($this->queue);
                break;
        }
    }

    public function getAnswer()
    {
        // var_dump(array_values($this->queue));
        echo implode(' ', array_values($this->queue)) . "\n";
    }
}

$answer = new Simulator();
$answer->getAnswer();

Doubly Linked List

Your task is to implement a double linked list.

Write a program which performs the following operations:

insert x: insert an element with key x into the front of the list.

delete x: delete the first element which has the key of x from the list. If there is not such element, you need not do anything.

deleteFirst: delete the first element from the list.

deleteLast: delete the last element from the list.

Input

The input is given in the following format:

n

command1

command2

...

commandn

In the first line, the number of operations n is given. In the following n lines, the above mentioned operations are given in the following format:

insert x

delete x

deleteFirst

deleteLast

Output

Print all the element (key) in the list after the given operations. Two consequtive keys should be separated by a single space.

Constraints

The number of operations ≤ 2,000,000

The number of delete operations ≤ 20

0 ≤ value of a key ≤ 109

The number of elements in the list does not exceed 106

For a delete, deleteFirst or deleteLast operation, there is at least one element in the list.

Sample Input 1

7
insert 5
insert 2
insert 3
insert 1
delete 3
insert 6
delete 5

Sample Output 1

6 1 2

Sample Input 2

9
insert 5
insert 2
insert 3
insert 1
delete 3
insert 6
delete 5
deleteFirst
deleteLast

Sample Output 2

1


<?php

class Simulator
{
    public $queue = array();
    public $n_processes;
    public $quantum;

    public function __construct()
    {
        fscanf(STDIN, "%d", $this->n_processes);
        while ($this->n_processes > 0) {
            fscanf(STDIN, "%s %s", $operation, $key);
            $this->doOperation($operation, $key);
            $this->n_processes -= 1;
        }
    }

    public function doOperation($operation, $key)
    {
        switch ($operation) {
            case 'insert':
                array_unshift($this->queue, $key);
                break;
            case 'delete':
                unset($this->queue[array_search($key, $this->queue)]);
                break;
            case 'deleteFirst':
                unset($this->queue[0]);
                break;
            case 'deleteLast':
                array_pop($this->queue);
                break;
        }
    }

    public function getAnswer()
    {
        // var_dump(array_values($this->queue));
        echo implode(' ', array_values($this->queue)) . "\n";
    }
}

$answer = new Simulator();
$answer->getAnswer();


<?php

class Simulator
{
    public $queue = array();
    public $n_processes;
    public $quantum;

    public function __construct()
    {
        fscanf(STDIN, "%s", $this->n_processes);
        while ($this->n_processes > 0) {
            fscanf(STDIN, "%s %s", $operation, $key);
            $this->doOperation($operation, $key);
            $this->n_processes -= 1;
        }
    }

    public function doOperation($operation, $key)
    {
        switch ($operation) {
            case 'insert':
                array_unshift($this->queue, $key);
                break;
            case 'delete':
                unset($this->queue[array_search($key, $this->queue)]);
                break;
            case 'deleteFirst':
                unset($this->queue[0]);
                break;
            case 'deleteLast':
                array_pop($this->queue);
                break;
        }
    }

    public function getAnswer()
    {
        // var_dump(array_values($this->queue));
        echo implode(' ', array_values($this->queue)) . "\n";
    }
}

$answer = new Simulator();
$answer->getAnswer();


<?php

class Simulator
{
    public $queue = array();
    public $n_processes;
    public $quantum;

    public function __construct()
    {
        fscanf(STDIN, "%s", $this->n_processes);
        while ($this->n_processes > 0) {
            fscanf(STDIN, "%s %d", $operation, $key);
            $this->doOperation($operation, $key);
            $this->n_processes -= 1;
        }
    }

    public function doOperation($operation, $key)
    {
        switch ($operation) {
            case 'insert':
                array_unshift($this->queue, $key);
                break;
            case 'delete':
                unset($this->queue[array_search($key, $this->queue)]);
                array_values($this->queue);
                break;
            case 'deleteFirst':
                unset($this->queue[0]);
                array_values($this->queue);
                break;
            case 'deleteLast':
                array_pop($this->queue);
                break;
        }
    }

    public function getAnswer()
    {
        // var_dump(array_values($this->queue));
        echo implode(' ', array_values($this->queue)) . "\n";
    }
}

$answer = new Simulator();
$answer->getAnswer();


<?php

class Simulator
{
    public $word = array();
    public $n_operations;
    public $operations;

    public function __construct()
    {
        fscanf(STDIN, '%d', $this->n_operations);
        $this->operations = new \SplDoublyLinkedList();
        while ($this->n_operations > 0) {
            $word = trim(fgets(STDIN));
            if ($word[0] === 'i') {
                $this->operations->unshift(substr($word, 7));
            } elseif ($word[6] === 'F') {
                $this->operations->shift();
            } elseif ($word[6] === 'L') {
                $this->operations->pop();
            } else {
                foreach ($this->operations as $key => $element) {
                    if ($element === substr($word, 7)) {
                        $this->operations->offsetUnset($key);
                        break;
                    }
                }
            }
            $this->n_operations -= 1;
        }
        $this->dll2 = $this->operations;
    }

    public function getAnswer()
    {
        $str = array();
        $this->operations = $this->dll2;
        while (true) {
            try {
                $element = $this->operations->shift();
                $str[] = $element;
            } catch (Exception $e) {
                echo implode(' ', $str), PHP_EOL;
                break;
            }
        }
    }
}

$answer = new Simulator();
$answer->getAnswer();


<?php
$lengthA = (int) fgets(STDIN);
$stdinA = explode(" ",fgets(STDIN));

$lengthKey = (int) fgets(STDIN);
$stdinKey = explode(" ",fgets(STDIN));

$count = 0;

for($j=0; $j<$lengthKey; ++$j){
    $result = linearSearch($stdinA, $stdinKey[$j], $lengthA);
    if($result == 1){
        $count++;
    }
}

echo $count;

function linearSearch($stdin, $key, $N){
    $i=0;
    while($stdin[$i] != $key){
        $i++;
        // NotFound
        if($i==$N){
            return 0;
        }
    }
    return 1;

}
?>

Search I

You are given a sequence of n integers S and a sequence of different q integers T. Write a program which outputs C, the number of integers in T which are also in the set S.

Input

In the first line n is given. In the second line, n integers are given. In the third line q is given. Then, in the fourth line, q integers are given.

Output

Print C in a line.

Constraints

n ≤ 10000

q ≤ 500

0 ≤ an element in S ≤ 109

0 ≤ an element in T ≤ 109

Sample Input 1

5
1 2 3 4 5
3
3 4 1

Sample Output 1

3

Sample Input 2

3
3 1 2
1
5

Sample Output 2

0

Sample Input 3

5
1 1 2 2 3
2
1 2

Sample Output 3

2

Notes


<?php
$lengthA = (int) fgets(STDIN);
$stdinA = explode(" ",fgets(STDIN));

$lengthKey = (int) fgets(STDIN);
$stdinKey = explode(" ",fgets(STDIN));

$count = 0;

for($j=0; $j<$lengthKey; ++$j){
    $result = linearSearch($stdinA, $stdinKey[$j], $lengthA);
    if($result == 1){
        $count++;
    }
}

echo trim($count) . PHP_EOL;

function linearSearch($stdin, $key, $N){
    $i=0;
    while($stdin[$i] != $key){
        $i++;
        // NotFound
        if($i==$N){
            return 0;
        }
    }
    return 1;
}


<?php
$lengthA = (int) fgets(STDIN);
$stdinA = explode(" ",fgets(STDIN));

$lengthKey = (int) fgets(STDIN);
$stdinKey = explode(" ",fgets(STDIN));

$count = 0;

for($j=0; $j<$lengthKey; ++$j){
    $result = linearSearch($stdinA, $stdinKey[$j], $lengthA);
    if($result == 1){
        $count++;
    }
}

echo trim($count), PHP_EOL;

function linearSearch($stdin, $key, $N){
    $i=0;
    while($stdin[$i] != $key){
        $i++;
        // NotFound
        if($i==$N){
            return 0;
        }
    }
    return 1;
}
?>


<?php
    $count=0;

    function Merge(&$A,$left,$mid,$right){
            global $count;
            $n1 = $mid - $left;
            $n2 = $right - $mid;
            $L = array();
            $R = array();
            for($i = 0;$i < $n1;$i++){
                    array_push($L,$A[$left+$i]);
            }
            for($i = 0;$i < $n2;$i++){
                    array_push($R,$A[$mid+$i]);
            }
            array_push($L,1000000001);
            array_push($R,1000000001);
            $i = 0;
            $j = 0;
            for($k = $left;$k < $right;$k++){
                    $count++;
                    if($L[$i]<=$R[$j]){
                            $A[$k] = $L[$i];
                            $i++;
                    }else{
                            $A[$k] = $R[$j];
                            $j++;
                    }
            }
    }

    function Merge_Sort(&$A,$left,$right){
            if($left + 1 < $right){
                    $mid = (int)(($left + $right)/2);
                    Merge_Sort($A,$left,$mid);
                    Merge_Sort($A,$mid,$right);
                    Merge($A,$left,$mid,$right);
            }
    }

    $A=array();
    (int)$max=fgets(STDIN);
    $num=fgets(STDIN);
    for($i=0;$i<$max;$i++){
            if($i==0){
                    $n=strtok($num," ");
            }else{
                    $n=strtok(" ");
            }
            array_push($A,(int)$n);
    }

    Merge_Sort($A,0,$max);

    for($i=0;$i<$max;$i++){
            printf("%d",$A[$i]);
            if($i!=$max-1){
                    printf(" ");
            }else{
                    printf("\n");
            }
    }
    printf("%d",$count);
?>

Merge Sort

Write a program of a Merge Sort algorithm implemented by the following pseudocode. You should also report the number of comparisons in the Merge function.

Merge(A, left, mid, right)
n1 = mid - left;
n2 = right - mid;
create array L[0...n1], R[0...n2]
for i = 0 to n1-1
do L[i] = A[left + i]
for i = 0 to n2-1
do R[i] = A[mid + i]
L[n1] = SENTINEL
R[n2] = SENTINEL
i = 0;
j = 0;
for k = left to right-1
if L[i] <= R[j]
then A[k] = L[i]
i = i + 1
else A[k] = R[j]
j = j + 1

Merge-Sort(A, left, right){
if left+1 < right
then mid = (left + right)/2;
call Merge-Sort(A, left, mid)
call Merge-Sort(A, mid, right)
call Merge(A, left, mid, right)

Input

In the first line n is given. In the second line, n integers are given.

Output

In the first line, print the sequence S. Two consequtive elements should be separated by a space character.

In the second line, print the number of comparisons.

Constraints

n ≤ 500000

0 ≤ an element in S ≤ 109

Sample Input 1

10
8 5 9 2 6 3 7 1 10 4

Sample Output 1

1 2 3 4 5 6 7 8 9 10
34

Notes


fscanf(STDIN,'%d',$n);
$tree=new Tree();
for($i=0;$i<$n;$i++) {
	$tree->insNode(trim(fgets(STDIN)));
}

for($i=0;$i<$n;$i++){
	$node=$tree->getNode($i);

	$out='node '.$node->id.': ';
	$out.='parent = '.$node->getParent()->id.', ';
	$out.='depth = '.$node->getDepth().', ';
	$out.=$node->getType().', ';
	$out.='['.implode(', ',$node->child).']';

	$out.='<br>';
	echo $out;
}

class Tree{
	public $node=array();

	public function insNode($str){
		$this->node[]=new Node($this,$str);
	}
	function getNode($id){
		foreach($this->node as $node){
			if($node->id==$id){return $node;}
		}
		return new Node();
	}
}
class Node{
	public $tree;
	public $id=-1;
	public $parent;
	public $child=array();
	public $depth=-1;
	function __construct($tree='',$str=''){
		if(!$tree){return;}

		$this->tree=$tree;

		$in=explode(' ',$str);
		$this->id=(int)$in[0];

		$cl=$in[1]+2;
		for($i=2;$i<$cl;$i++){$this->child[]=(int)$in[$i];}
	}
	function getParent(){
		if(isset($this->parent)){return $this->parent;}
		foreach($this->tree->node as $node){
			if($node->id==$this->id){continue;}
			foreach($node->child as $child){
				if($child==$this->id){return $node;}
			}
		}
		return new Node();
	}
	function getDepth(){
		if($this->id==-1){return -1;}
		if($this->depth>-1){return $this->depth;}

		return $this->depth=$this->getParent()->getDepth()+1;
	}
	function getType(){
		$isP=($this->getParent()->id!=-1)? 1:0;
		$isC=(count($this->child))? 1:0;
		if(!$isP){return 'root';}
		return ($isC)? 'internal node':'leaf';
	}
}

Rooted Trees

A graph G = (V, E) is a data structure where V is a finite set of vertices and E is a binary relation on V represented by a set of edges. Fig. 1 illustrates an example of a graph (or graphs).

Fig. 1

A free tree is a connnected, acyclic, undirected graph. A rooted tree is a free tree in which one of the vertices is distinguished from the others. A vertex of a rooted tree is called "node."

Your task is to write a program which reports the following information for each node u of a given rooted tree T:

node ID of u

parent of u

depth of u

node type (root, internal node or leaf)

a list of chidlren of u

If the last edge on the path from the root r of a tree T to a node x is (p, x), then p is the parent of x, and x is a child of p. The root is the only node in T with no parent.

A node with no children is an external node or leaf. A nonleaf node is an internal node

The number of children of a node x in a rooted tree T is called the degree of x.

The length of the path from the root r to a node x is the depth of x in T.

Here, the given tree consists of n nodes and evey node has a unique ID from 0 to n-1.

Fig. 2 shows an example of rooted trees where ID of each node is indicated by a number in a circle (node). The example corresponds to the first sample input.

Fig. 2

Input

The first line of the input includes an integer n, the number of nodes of the tree.

In the next n lines, the information of each node u is given in the following format:

id k c1 c2 ... ck

where id is the node ID of u, k is the degree of u, c1 ... ck are node IDs of 1st, ... kth child of u. If the node does not have a child, the k is 0.

Output

Print the information of each node in the following format ordered by IDs:

node id: parent = p, depth = d, type, [c1...ck]

p is ID of its parent. If the node does not have a parent, print -1.

d is depth of the node.

type is a type of nodes represented by a string (root, internal node or leaf). If the root can be considered as a leaf or an internal node, print root.

c1...ck is the list of children as a ordered tree.

Please follow the format presented in a sample output below.

Constraints

1 ≤ n ≤ 100000

Sample Input 1

13
0 3 1 4 10
1 2 2 3
2 0
3 0
4 3 5 6 7
5 0
6 0
7 2 8 9
8 0
9 0
10 2 11 12
11 0
12 0

Sample Output 1

node 0: parent = -1, depth = 0, root, [1, 4, 10]
node 1: parent = 0, depth = 1, internal node, [2, 3]
node 2: parent = 1, depth = 2, leaf, []
node 3: parent = 1, depth = 2, leaf, []
node 4: parent = 0, depth = 1, internal node, [5, 6, 7]
node 5: parent = 4, depth = 2, leaf, []
node 6: parent = 4, depth = 2, leaf, []
node 7: parent = 4, depth = 2, internal node, [8, 9]
node 8: parent = 7, depth = 3, leaf, []
node 9: parent = 7, depth = 3, leaf, []
node 10: parent = 0, depth = 1, internal node, [11, 12]
node 11: parent = 10, depth = 2, leaf, []
node 12: parent = 10, depth = 2, leaf, []

Sample Input 2

4
1 3 3 2 0
0 0
3 0
2 0

Sample Output 2

node 0: parent = 1, depth = 1, leaf, []
node 1: parent = -1, depth = 0, root, [3, 2, 0]
node 2: parent = 1, depth = 1, leaf, []
node 3: parent = 1, depth = 1, leaf, []

Note

You can use a left-child, right-sibling representation to implement a tree which has the following data:

the parent of u

the leftmost child of u

the immediate right sibling of u

Reference

Introduction to Algorithms, Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein. The MIT Press.


<?php
$nl=(int)trim(fgets(STDIN));

$node=array($nl);

for($i=0;$i<$nl;$i++){$node[$i]=array('ch'=>array(),'pa'=>-1,'si'=>-1,'he'=>-1);}

for($i=0;$i<$nl;$i++){
	$ls=explode(' ',trim(fgets(STDIN)));#lines
	$id=(int)array_shift($ls);
	$ca=(int)array_shift($ls);

	if($ca==-1){continue;}#sibling none

	$cb=(int)array_shift($ls);

	$node[$id]['ch']=array($ca,$cb);

	$node[$ca]['pa']=$id;
	$node[$cb]['pa']=$id;

	$node[$ca]['si']=$cb;#sibling
	$node[$cb]['si']=$ca;
}

for($i=0;$i<$nl;$i++){
	$ni=$node[$i];#id=i
	$ty='root';#type
	$de=0;#depth
	$he=0;#height

	$cc=count($ni['ch']);#degree

	if($ni['pa']!=-1){
		$de=1;
		$nt=$ni['pa'];
		while($node[$nt]['pa']!=-1){
			++$de;
			$nt=$node[$nt]['pa'];
		}
		$ty=($cc)? 'internal node':'leaf';
	}

	if($cc){
		$he=getHe($i);
	}

	printf("node %d: parent = %d, sibling = %d, degree = %d, depth = %d, height = %d, %s\n"
		,$i
		,$ni['pa']
		,$ni['si']
		,$cc
		,$de
		,$he
		,$ty
	);
}

function getHe($id){
	global $node;

	$ni=$node[$id];

	if($ni['he']!=-1){return $ni['he'];}

	$ch=$ni['ch'];

	$he=0;

	if(count($ch)){$he=1+max(getHe($ch[0]),getHe($ch[1]));}

	$ni['he']=$he;
	return $he;
}

Binary Tree

A rooted binary tree is a tree with a root node in which every node has at most two children.

Your task is to write a program which reads a rooted binary tree T and prints the following information for each node u of T:

node ID of u

parent of u

sibling of u

the number of children of u

depth of u

height of u

node type (root, internal node or leaf)

If two nodes have the same parent, they are siblings. Here, if u and v have the same parent, we say u is a sibling of v (vice versa).

The height of a node in a tree is the number of edges on the longest simple downward path from the node to a leaf.

Here, the given binary tree consists of n nodes and evey node has a unique ID from 0 to n-1.

Input

The first line of the input includes an integer n, the number of nodes of the tree.

In the next n lines, the information of each node is given in the following format:

id left right

id is the node ID, left is ID of the left child and right is ID of the right child. If the node does not have the left (right) child, the left(right) is indicated by -1.

Output

Print the information of each node in the following format:

node id: parent = p, sibling = s, degree = deg, depth = dep, height = h, type

p is ID of its parent. If the node does not have a parent, print -1.

s is ID of its sibling. If the node does not have a sibling, print -1.

deg, dep and h are the number of children, depth and height of the node respectively.

type is a type of nodes represented by a string (root, internal node or leaf. If the root can be considered as a leaf or an internal node, print root.

Please follow the format presented in a sample output below.

Constraints

1 ≤ n ≤ 25

Sample Input 1

9
0 1 4
1 2 3
2 -1 -1
3 -1 -1
4 5 8
5 6 7
6 -1 -1
7 -1 -1
8 -1 -1

Sample Output 1

node 0: parent = -1, sibling = -1, degree = 2, depth = 0, height = 3, root
node 1: parent = 0, sibling = 4, degree = 2, depth = 1, height = 1, internal node
node 2: parent = 1, sibling = 3, degree = 0, depth = 2, height = 0, leaf
node 3: parent = 1, sibling = 2, degree = 0, depth = 2, height = 0, leaf
node 4: parent = 0, sibling = 1, degree = 2, depth = 1, height = 2, internal node
node 5: parent = 4, sibling = 8, degree = 2, depth = 2, height = 1, internal node
node 6: parent = 5, sibling = 7, degree = 0, depth = 3, height = 0, leaf
node 7: parent = 5, sibling = 6, degree = 0, depth = 3, height = 0, leaf
node 8: parent = 4, sibling = 5, degree = 0, depth = 2, height = 0, leaf

Reference

Introduction to Algorithms, Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein. The MIT Press.


<?php
$nl=(int)trim(fgets(STDIN));

$node=array($nl);

for($i=0;$i<$nl;$i++){
	$node[$i]=array('ca'=>-1,'cb'=>-1,'pa'=>-1,'si'=>-1,'dg'=>0,'he'=>-1);
}

for($i=0;$i<$nl;$i++){
	$ls=explode(' ',trim(fgets(STDIN)));#lines

	$id=(int)array_shift($ls);
	$ca=(int)array_shift($ls);
	$cb=(int)array_shift($ls);

	if($ca!=-1){
		++$node[$id]['dg'];#degree
		$node[$id]['ca']=$ca;#left

		$node[$ca]['pa']=$id;#parent
		$node[$ca]['si']=$cb;#sibling
	}
	if($cb!=-1){
		++$node[$id]['dg'];#degree
		$node[$id]['cb']=$cb;#right

		$node[$cb]['pa']=$id;
		$node[$cb]['si']=$ca;
	}
}

$root=-1;
for($i=0;$i<$nl;$i++){
	if($node[$i]['pa']==-1){
		$root=$i;
		break;
	}
}

getHe($root);

for($i=0;$i<$nl;$i++){
	$ni=$node[$i];

	$de=0;#depth
	for($j=$ni['pa'];$j!=-1;$j=$node[$j]['pa']){++$de;}

	$ty=($i==$root)? 'root':(($ni['dg'])? 'internal node':'leaf');#type

	printf("node %d: parent = %d, sibling = %d, degree = %d, depth = %d, height = %d, %s\n"
		,$i
		,$ni['pa']
		,$ni['si']
		,$ni['dg']
		,$de
		,$ni['he']
		,$ty
	);
}

function getHe($id){
	global $node;

	if($id==-1){return -1;}

	$ni=$node[$id];

	return $node[$id]['he']=1+max(getHe($ni['ca']),getHe($ni['cb']));
}


<?php

class Distance
{
    public function __construct(Point $point1, Point $point2)
    {
        $this->point1 = $point1;
        $this->point2 = $point2;
    }

    public function compute()
    {
        return sqrt(
            pow($this->point2->x() - $this->point1->x(), 2)
          + pow($this->point2->y() - $this->point1->y(), 2)
        );
    }
}

class Point
{
    private $x;
    private $y;

    public function __construct($x, $y)
    {
        $this->x = $x;
        $this->y = $y;
    }

    public function x()
    {
        return $this->x;
    }

    public function y()
    {
        return $this->y;
    }
}

fscanf(STDIN, '%d %d %d %d', $x1, $y1, $x2, $y2);

echo (new Distance(new Point($x1, $y1), new Point($x2, $y2)))
    ->compute(), PHP_EOL;

Distance

Write a program which calculates the distance between two points P1(x1, y1) and P2(x2, y2).

Input

Four real numbers x1, y1, x2 and y2 are given in a line.

Output

Print the distance in real number. The output should not contain an absolute error greater than 10-4.

Sample Input

0 0 1 1

Sample Output

1.41421356


<?php

fscanf(STDIN, '%d %d %d', $a, $b, $C);

//三角関数で使えるように度をラジアンに変換する
$rad = deg2rad($C);

//面積を求める
$S = $a * $b / 2 * sin($rad);

//残りの１辺の長さを求める
$c = sqrt(pow($a, 2) + pow($b, 2) - 2 * $a * $b * cos($rad));

//3辺の合計
$L = $a + $b + $c;

//高さを求める
$h = $S / $a * 2;

printf("%f\n%f\n%f\n", $S, $L, $h);

Triangle

For given two sides of a triangle a and b and the angle C between them, calculate the following properties:

S: Area of the triangle

L: The length of the circumference of the triangle

h: The height of the triangle with side a as a bottom edge

Input

The length of a, the length of b and the angle C are given in integers.

Output

Print S, L and h in a line respectively. The output should not contain an absolute error greater than 10-4.

Sample Input

4 3 90

Sample Output

6.00000000
12.00000000
3.00000000


<?php
while (true) {
  $n = trim(fgets(STDIN));
  if (!$n) break;

  $points = explode(" ", trim(fgets(STDIN)));
  $avg = array_sum($points) / $n;

  $dispersion = 0;
  foreach ($points as $point) $dispersion += pow($avg - $point, 2);
  $dispersion /= $n;

  echo sprintf("$.10f\n", abs(sqrt($dispersion)));
}

Standard Deviation

You have final scores of an examination for n students. Calculate standard deviation of the scores s1, s2 ... sn.

The variance α2 is defined by

α2 = (∑ni=1(si - m)2)/n

where m is an average of si.

The standard deviation of the scores is the square root of their variance.

Input

The input consists of multiple datasets. Each dataset is given in the following format:

n
s1 s2 ... sn

The input ends with single zero for n.

Output

For each dataset, print the standard deviation in a line. The output should not contain an absolute error greater than 10-4.

Constraints

n ≤ 1000

0 ≤ si ≤ 100

Sample Input

5
70 80 100 90 20
3
80 80 80
0

Sample Output

27.85677655
0.00000000


<?php

while (true) {
    fscanf(STDIN, "%d", $num_people);
    if ($num_people == 0) {
        break;
    }

    $scores = array_map("intval", explode(" ", trim(fgets(STDIN))));
    $dev_value = 0;
    $average = array_sum($scores) / $num_people;
    foreach ($scores as $score) {
        $dev_value += pow($score - $average, 2);
    }

    echo sqrt($dev_value/$num_people)."\n";
}


<?php
class Dice{
  public $label=[1,2,3,4,5,6];#index+1????????¢?????????
  public $pos=[0,1,2];#?????¢,?????¢,??\??¢???index ???????????¢???5-index
  function __construct($sLabel){
    $this->label=explode(' ',$sLabel,6);
  }
  function move($s){
    $x=$this->pos[0];
    if($s=='E'){
      $this->pos[0]=5-$this->pos[2];
      $this->pos[2]=$x;
    }
    elseif($s=='W'){
      $this->pos[0]=$this->pos[2];
      $this->pos[2]=5-$x;
    }
    elseif($s=='N'){
      $this->pos[0]=$this->pos[1];
      $this->pos[1]=5-$x;
    }
    elseif($s=='S'){
      $this->pos[0]=5-$this->pos[1];
      $this->pos[1]=$x;
    }
  }
  function top(){
    return $this->label[$this->pos[0]];
  }
}

$dice=new Dice(trim(fgets(STDIN)));
$move=str_split(trim(fgets(STDIN)));
foreach($move as $m) $dice->move($m);
echo $dice->top();
?>

MathJax.Hub.Config({ tex2jax: { inlineMath: [["$","$"], ["\\(","\\)"]], processEscapes: true }});

Dice I

Write a program to simulate rolling a dice, which can be constructed by the following net.

As shown in the figures, each face is identified by a different label from 1 to 6.

Write a program which reads integers assigned to each face identified by the label and a sequence of commands to roll the dice, and prints the integer on the top face. At the initial state, the dice is located as shown in the above figures.

Input

In the first line, six integers assigned to faces are given in ascending order of their corresponding labels.

In the second line, a string which represents a sequence of commands, is given. The command is one of 'E', 'N', 'S' and 'W' representing four directions shown in the above figures.

Output

Print the integer which appears on the top face after the simulation.

Constraints

$0 \leq $ the integer assigned to a face $ \leq 100$

$0 \leq $ the length of the command $\leq 100$

Sample Input 1

1 2 4 8 16 32
SE

Sample Output 1

8

You are given a dice where 1, 2, 4, 8, 16 are 32 are assigned to a face labeled by 1, 2, ..., 6 respectively. After you roll the dice to the direction S and then to the direction E, you can see 8 on the top face.

Sample Input 2

1 2 4 8 16 32
EESWN

Sample Output 2

32


<?php
class Dice{
  public $label=[1,2,3,4,5,6];#index+1????????¢?????????
  public $pos=[0,1,2];#?????¢,?????¢,??\??¢???index ???????????¢???5-index
  function __construct($sLabel){$this->label=explode(' ',$sLabel,6);}
  function move($s){
    $x=$this->pos[0];
    if($s=='E'){
      $this->pos[0]=5-$this->pos[2];
      $this->pos[2]=$x;
    }
    elseif($s=='W'){
      $this->pos[0]=$this->pos[2];
      $this->pos[2]=5-$x;
    }
    elseif($s=='N'){
      $this->pos[0]=$this->pos[1];
      $this->pos[1]=5-$x;
    }
    elseif($s=='S'){
      $this->pos[0]=5-$this->pos[1];
      $this->pos[1]=$x;
    }
  }
  function spin($s){
    $x=$this->pos[1];
    if($s=='L'){
      $this->pos[1]=$this->pos[2];
      $this->pos[2]=5-$x;
    }
    elseif($s=='R'){
      $this->pos[1]=5-$this->pos[2];
      $this->pos[2]=$x;
    }
  }
  function toTop($label){
    for($j=0;$j<4;$j++){
      if($this->top()==$label) return 1;
      $this->move('N');
    }
    for($j=0;$j<2;$j++){
      $this->move('E');
      if($this->top()==$label) return 1;
      $this->move('E');
    }
    return 0;
  }
  function toSpin($label){
    for($j=0;$j<4;$j++){
      if($this->front()==$label) return 1;
      $this->spin('L');
    }
    return 0;
  }
  function isSame($dice){
    $move=array('','N','W','W','W','N');#1 2 3 5 4 6
    $end=[];
    for($i=0;$i<6;$i++){
      $this->move($move[$i]);
      $top=$this->top();
      if(isset($end[$top])) continue;
      $end[$top]=1;
      if(!$dice->toTop($top)) continue;
      if(!$dice->toSpin($this->front())) continue;
      if($dice->right()!=$this->right()) continue;
      if($dice->bottom()!=$this->bottom()) continue;
      if($dice->back()!=$this->back()) continue;
      if($dice->left()!=$this->left()) continue;
      return 1;
    }
    return 0;
  }
  function top(){return $this->label[$this->pos[0]];}
  function front(){return $this->label[$this->pos[1]];}
  function right(){return $this->label[$this->pos[2]];}
  function bottom(){return $this->label[5-$this->pos[0]];}
  function back(){return $this->label[5-$this->pos[1]];}
  function left(){return $this->label[5-$this->pos[2]];}
}

$d1=new Dice(trim(fgets(STDIN)));
$d2=new Dice(trim(fgets(STDIN)));

echo ($d1->isSame($d2))?'Yes':'No';

MathJax.Hub.Config({ tex2jax: { inlineMath: [["$","$"], ["\\(","\\)"]], processEscapes: true }});

Dice III

Write a program which reads the two dices constructed in the same way as Dice I, and determines whether these two dices are identical. You can roll a dice in the same way as Dice I, and if all integers observed from the six directions are the same as that of another dice, these dices can be considered as identical.

Input

In the first line, six integers assigned to faces of a dice are given in ascending order of their corresponding labels.

In the second line, six integers assigned to faces of another dice are given in ascending order of their corresponding labels.

Output

Print "Yes" if two dices are identical, otherwise "No" in a line.

Constraints

$0 \leq $ the integer assigned to a face $ \leq 100$

Sample Input 1

1 2 3 4 5 6
6 2 4 3 5 1

Sample Output 1

Yes

Sample Input 2

1 2 3 4 5 6
6 5 4 3 2 1

Sample Output 2

No


<?php
    $input = trim(fgets(STDIN));
    echo pow($input, 3);
?>

X Cubic

Write a program which calculates the cube of a given integer x.

Input

An integer x is given in a line.

Output

Print the cube of x in a line.

Constraints

1 ≤ x ≤ 100

Sample Input 1

2

Sample Output 1

8

Sample Input 2

3

Sample Output 2

27


<?php
 $x = (int)trim(fgets(STDIN));
 echo $x*$x*$x;
?>


<?php
  $x = (int)trim(fgets(STDIN));
  echo $x*$x*$x+"\n";
 ?>


<?php

$x = trim(fgets(STDIN));

echo pow($x,3),PHP_EOL;

?>


<?php
$stdin = trim(fgets(STDIN));
echo $stdin * $stdin * $stdin . "\n";


<?php echo pow(trim(fgets(STDIN)), 3), PHP_EOL;


<?php
$x = trim(fgets(STDIN));
echo pow($x,3)."\n";


<?php
$input = trim(fgets(STDIN));
echo $input * $input * $input;

?>


<?php
    $x = trim(fgets(STDIN));

    echo pow($x, 3);
?>


<?php
$a = fgets(STDIN);

echo $a * $a * $a;


Rectangle

Write a program which calculates the area and perimeter of a given rectangle.

Input

The length a and breadth b of the rectangle are given in a line separated by a single space.

Output

Print the area and perimeter of the rectangle in a line. The two integers should be separated by a single space.

Constraints

1 ≤ a, b ≤ 100

Sample Input 1

3 5

Sample Output 1

15 16


<?php
$input = fgets(STDIN);
$num=explode(" ", $input);
print_r($num);
$area=$num[0]*$num[1];
$side=($num[0]+$num[1])*2;
echo $area." ".$side;
?>


<?php

$input = trim(fgets(STDIN));

$input =explode(" ",$input);

echo $input[0]*$input[1];
echo ' ';
echo $input[0]*2+$input[1]*2;
echo "\n";


<?php
list($a,$b) = explode(" ",trim(fgets(STDIN)));
$s = $a * $b;
$l = ($a + $b) * 2;
echo $s . " " . $l;


<?php
$line = trim(fgets(STDIN));
list($a, $b) = explode(' ', $line);
$c = $a * $b;
$d = $a * 2 + $b * 2;
echo "$c $d\n";


<?php
list($a,$b) = explode(" ",fgets(STDIN));
echo $a*$b,PHP_EOL
?>


<?php
$stdin = trim(fgets(STDIN));
$input = explode(" ", $stdin);

$area = (int)$input[0] * (int)$input[1];
$lenght = ((int)$input[0] + (int)$input[1]) * 2;

echo "$area",' ',"$lenght";
?>


<?php
$format="%d %d";
fscanf(STDIN,$format,$a,$b);
$squareMeasure = $a*$b;
$circumFerence = $a*2 +$b*2;
echo $squareMeasure." ".$circumFerence;
?>


MathJax.Hub.Config({ tex2jax: { inlineMath: [["$","$"], ["\\(","\\)"]], processEscapes: true }});

Watch

Write a program which reads an integer $S$ [second] and converts it to $h:m:s$ where $h$, $m$, $s$ denote hours, minutes (less than 60) and seconds (less than 60) respectively.

Input

An integer $S$ is given in a line.

Output

Print $h$, $m$ and $s$ separated by ':'. You do not need to put '0' for a value, which consists of a digit.

Constraints

$0 \leq S \leq 86400$

Sample Input 1

46979

Sample Output 1

13:2:59


<?php
$input = trim(fgets(STDIN));
$time = $input;
$hour = floor($time / 3600);
$minutes = floor(($time % 3600) / 60);
$seconds = ($time % 3600) % 60;
echo $hour.":".$minutes.":".$seconds;
?>


<?php
$second = trim(fgets(STDIN));
printf("%02d:%02d:%02d", $second / 3600, $second / 60 % 60, $second % 60);


<?php
$input = trim(fgets(STDIN));
$hour = floor($input / 3600);
$minutes = floor(($input / 60) % 60);
$seconds = floor($input % 60);

echo $hour. ':'. $minutes. ':'. $seconds;
?>


<?php
$input = trim(fgets(STDIN));
$hh = floor($input / 3600);
$mm = floor($input % 3600 / 60);
$ss = $input % 3600 % 60;
echo $hh. ":". $mm. ":". $ss;
?>


<?php
$input = explode(' ',trim(fgets(STDIN)));
$s = intval($input[0]);

$a = intval($s/3600);
$b = intval($s%3600);
$c = intval($b/60);
$d = intval($b%60);

echo $a.':'.$c.':'.$d;

?>