Problem:
Problem A: 期末試験!

私立桜が丘女子高等学校に通う平沢唯さんは明後日までに進路希望を出さなければならないのだが、困ったことに進路についてまだ何も決めていなかった。
友人の和に相談したところ、和の第一志望はK大と知り、自分もK大に入れるかどうか進路指導の先生に相談にいった。

相談された進路指導の先生であるあなたは唯さんがK大に入れるかどうかを予想するため唯さんの期末試験の成績を参考にすることにした。
しかし、唯さんは試験の山が当たるかどうかによって大きく成績が左右されるため、過去の期末試験の中で一番良かった時の点数と一番悪かった時の点数を調べることにした。
過去の期末試験のデータは5教科の各点数のみしか残っておらず、試験の合計点数は残っていなかった。
したがってあなたの仕事は各試験の点数データを入力として、過去の期末試験の中で一番良かった時の点数と一番悪かった時の点数を出力するプログラムを書くことである。

Input

n
s11 s12 s13 s14 s15
...
sn1 sn2 sn3 sn4 sn5

n は今までに受けた試験の回数である。試験の回数は1以上100以下である。
続く n 行には各試験における5教科の点数が与えられる。点数の範囲は0以上100以下の整数である。

Output

最高点 最低点を、一行に出力しなさい。最高点と最低点の間は1文字の空白で区切り、これら以外の文字を含んではならない。

Notes on Test Cases

上記入力形式で複数のデータセットが与えられます。各データセットに対して上記出力形式で出力を行うプログラムを作成して下さい。

n が 0 のとき入力の終わりを示します。

Sample Input

3
49 50 87 78 41
27 61 100 45 84
28 88 40 95 66
2
100 100 100 100 100
0 0 0 0 0
1
89 90 85 93 82
0

Output for Sample Input

317 305
500 0
439 439

Solution in JAVA (judge verdict: Accepted)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

import static java.lang.Integer.parseInt;

/**
 * Final Examination!
 */
public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String line;

		while ((line = br.readLine()) != null && !line.isEmpty()) {
			int n = parseInt(line);
			if (n == 0) break;

			boolean[] score = new boolean[501];

			for (int i = 0; i < n; i++) {
				StringTokenizer st = new StringTokenizer(br.readLine());
				int sum = 0;
				while (st.hasMoreElements()) {
					sum += parseInt(st.nextToken());
				}
				score[sum] = true;
			}
			int min = 0, max = 0;
			for (int j = 0; j < score.length; j++) {
				if (score[j]) {
					min = j;
					break;
				}
			}
			for (int j = score.length - 1; j >= 0; j--) {
				if (score[j]) {
					max = j;
					break;
				}
			}
			System.out.println(max + " " + min);
		} // end while
	} // end main
}