Problem:
ウォーキング

会津リバーサイドホスピタルでは、リハビリと健康増進のため、入院患者が一日二回のウォーキングを行っています。元気に退院するために、ウォーキングで体力を回復しようと頑張る人が日に日に増えきたことから、院長が「一日で一番長い距離を歩いた人にプレゼントをあげよう!」という企画を立ち上げました。

患者の数 n (1 ≤ n ≤ 10000)、それぞれの患者の番号 pi (1 ≤ pi ≤ 10000)、一回目に歩いた距離 d1i、二回目に歩いた距離 d2i (0 ≤ d1i, d2i ≤ 5000) を入力とし、歩いた距離の合計が最も長い患者の番号とその距離を出力するプログラムを作成してください。ただし、一日に歩いた距離が同じ患者はいないものとします。

Input

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

n
p1 d11 d21
p2 d12 d22
:
pn d1n d2n

入力はすべて整数で与えられます。データセットの数は50 を超えません。

Output

入力データセットごとに、最も長い合計距離を歩いた患者の番号とその歩いた距離を１行に出力します。

Sample Input

5
263 2345 2504
1 3210 1985
5000 1501 4132
10000 503 3107
51 1758 2690
3
345 5000 2396
7 3910 1590
6789 2525 3616
0

Output for the Sample Input

5000 5633
345 7396

Solution in C++ (judge verdict: Runtime Error)

//
//  main.cpp
//  AOJ_0217
//
//  Created by ツ閉淞暗、 ツ重ツ和 on 12/10/11.
//  Copyright 2011 ツ嘉ッツ津δ妥・ツ学. All rights reserved.
//

#include <cstdlib>
#include <iostream>
#include <sstream>

int main ()
{
    using namespace std;
    int n;
    string line;
    istringstream iss;
    
    while ( getline( cin, line ) ) {
        iss.str( line );
        // the number of patients, or 0 for temination.
        if ( iss >> n ) {
            // terminate
            if ( n == 0 ) return EXIT_SUCCESS;
            else if (n < 1 || n > 10000) return EXIT_FAILURE;
            
            // patient id
            int p;
            // patient id of max d1+d2
            int max_p;
            // 1st and 2nd walking distances
            int d1, d2;
            // max sum of walking distance
            int max = -1;
            // how many data processed
            int count = 0;
            
            iss.clear();
            // let's get data of patients
            while ( getline( cin, line ) ) {
                iss.str( line );
                if ( iss >> p >> d1 >> d2 ) {
                    // logic error: inapropriate data range
                    if (p < 1 || p > 10000 || d1 < 0 || d1 > 5000 || d2 < 0 || d1 > 5000 )
                        return EXIT_FAILURE;
                    iss.clear();
                    // FIXME: duplication (e.g. no p duplicate, no d1+d2 duplicate) check is not implemented
                    if ( max < d1 + d2) {
                        max = d1 + d2;
                        max_p = p;
                    }
                    // data of patients were all processed
                    if ( ++count == n ) {
                        cout << max_p << " " << max << endl;
                        max = -1;
                        break;
                    }
                }
                // logic error: there should be 3 inputs
                else return EXIT_FAILURE;
            }
        }
        // logic error: there should be input
        else return EXIT_FAILURE;
    }
    
    // logic error: shouldn't be here
    return EXIT_FAILURE;
}