Problem:
Score: 300 points

Problem Statement

In the Ancient Kingdom of Snuke, there was a pyramid to strengthen the authority of Takahashi, the president of AtCoder Inc.

The pyramid had center coordinates (C_X, C_Y) and height H. The altitude of coordinates (X, Y) is max(H - |X - C_X| - |Y - C_Y|, 0).

Aoki, an explorer, conducted a survey to identify the center coordinates and height of this pyramid. As a result, he obtained the following information:

C_X, C_Y was integers between 0 and 100 (inclusive), and H was an integer not less than 1.

Additionally, he obtained N pieces of information. The i-th of them is: "the altitude of point (x_i, y_i) is h_i."

This was enough to identify the center coordinates and the height of the pyramid. Find these values with the clues above.

Constraints

N is an integer between 1 and 100 (inclusive).

x_i and y_i are integers between 0 and 100 (inclusive).

h_i is an integer between 0 and 10^9 (inclusive).

The N coordinates (x_1, y_1), (x_2, y_2), (x_3, y_3), ..., (x_N, y_N) are all different.

The center coordinates and the height of the pyramid can be uniquely identified.

Input

Input is given from Standard Input in the following format:

N
x_1 y_1 h_1
x_2 y_2 h_2
x_3 y_3 h_3
:
x_N y_N h_N

Output

Print values C_X, C_Y and H representing the center coordinates and the height of the pyramid in one line, with spaces in between.

Sample Input 1

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

Sample Output 1

2 2 6

In this case, the center coordinates and the height can be identified as (2, 2) and 6.

Sample Input 2

2
0 0 100
1 1 98

Sample Output 2

0 0 100

In this case, the center coordinates and the height can be identified as (0, 0) and 100.

Note that C_X and C_Y are known to be integers between 0 and 100.

Sample Input 3

3
99 1 191
100 1 192
99 0 192

Sample Output 3

100 0 193

In this case, the center coordinates and the height can be identified as (100, 0) and 193.

Solution in C++14 (GCC 5.4.1) (judge verdict: Wrong Answer)

#include<bits/stdc++.h>
using namespace std;

#define MAX 101
long long tile[MAX][MAX];
tuple<long long,long long,long long> data[MAX];
long long n;
// プロトタイプ宣言
void Solve(void);
// ここまで


int main(){
	cin>>n;
	long long x,y,h;
	for(long long i=0;i<n;i++){
		cin>>x>>y>>h;
		data[i]=make_tuple(x,y,h);
	}


	long long ansx=0, ansy=0, ansh=0;
	if(n==1){
		ansx=get<0>(data[0]);
		ansy=get<1>(data[0]);
		ansh=get<2>(data[0]);

	}else{
		Solve();
		bool flag=false;

		for(long long y=0;y<MAX;y++){
			for(long long x=0;x<MAX;x++){
				if(tile[y][x]){
					flag=true;
					ansx=x;
					ansy=y;
					ansh=tile[y][x];
					break;
				}
			}
			if(flag)break;
		}
	}
	printf("%d %d %d\n",ansx,ansy,ansh);

	return 0;
}

void Solve(void){
	// 初期化 {{{
	for(long long i=0;i<MAX;i++){
		for(long long j=0;j<MAX;j++){
			tile[i][j]=0;
		}
	}
	// }}}
	// 解答 {{{
	// 答えになるかもしれない座標はせいぜい101x101個なので全部試してみる
	bool flag=true;
	for(long long i=0;i<MAX;i++){	// マス目:y
		for(long long j=0;j<MAX;j++){ // マス目:x
			bool flag=true;

			// 初期設定
			long long sx=get<0>(data[0]);
			long long sy=get<1>(data[0]);
			long long sh=get<2>(data[0]);
			tile[i][j]= sh + abs(j-sx) + abs(i-sy);
			/*
			   とりあえず、現座標の高さを、
			   『1個目のデータから求められる高さ』と置いてみる
			 */

			for(long long k=1;k<n;k++){
				long long x=get<0>(data[k]);
				long long y=get<1>(data[k]);
				long long h=get<2>(data[k]);

				long long height = h + abs(j-x) + abs(i-y);
				// 2個目以降のデータによって求められる、現座標の高さ
				if(height!=tile[i][j]){
					flag=false;
					// 最初に置いた高さと height が違うなら、そこは正解じゃないよね！！
					break;
				}
			}
			if(flag==false){
				tile[i][j]=0;
				continue;
			}
		}
	}
	// }}}
}