/*
* Problem :: 2470 / 두 용액
*
* Kind :: Two Pointers
*
* Insight
* - 이 문제... 옛날에 풀었던 문제와 굉장히 비슷하다?
* + 14921 / 용액 합성하기
* 위 문제에서는 특성값이 0에 가장 가까운 값 자체를 구한다면
* 현재 문제에서는 특성값이 0에 가장 가까운 값을 만드는 두 용액을 구한다
* # 14921 과 똑같은 알고리즘에서
* 답이 갱신될 때마다 그 용액의 값들을 저장하면 되겠다
* -> 알고리즘 설명은 링크로 대체하겠다!
* https://gglifer-cs.tistory.com/22 <= 날먹
*/
//
// BOJ
// ver.C++
//
// Created by GGlifer
//
// Open Source
#include <iostream>
#include <algorithm>
using namespace std;
#define endl '\n'
// Set up : Global Variables
/* None */
// Set up : Functions Declaration
/* None */
int main()
{
// Set up : I/O
ios::sync_with_stdio(false);
cin.tie(nullptr);
// Set up : Input
int N; cin >> N;
int A[N];
for (int i=0; i<N; i++)
cin >> A[i];
// Process
/* 위 설명의 링크 참고 */
sort(A, A+N);
int s = 0, e = N-1;
int val = A[s] + A[e], ans[2] = {A[s], A[e]};
while (s < e) {
int sum = A[s] + A[e];
if (abs(val) > abs(sum)) {
val = sum;
ans[0] = A[s], ans[1] = A[e];
} if (abs(val) == 0) break;
(sum > 0) ? e-- : s++;
}
// Control : Output
cout << ans[0] << ' ' << ans[1] << endl;
}
// Helper Functions
/* None */