Problem:
Score : 400 points

Problem Statement

Let {\rm comb}(n,r) be the number of ways to choose r objects from among n objects, disregarding order.
From n non-negative integers a_1, a_2, ..., a_n, select two numbers a_i > a_j so that {\rm comb}(a_i,a_j) is maximized.
If there are multiple pairs that maximize the value, any of them is accepted.

Constraints

2 \leq n \leq 10^5

0 \leq a_i \leq 10^9

a_1,a_2,...,a_n are pairwise distinct.

All values in input are integers.

Input

Input is given from Standard Input in the following format:

n
a_1 a_2 ... a_n

Output

Print a_i and a_j that you selected, with a space in between.

Sample Input 1

5
6 9 4 2 11

Sample Output 1

11 6

\rm{comb}(a_i,a_j) for each possible selection is as follows:

\rm{comb}(4,2)=6

\rm{comb}(6,2)=15

\rm{comb}(6,4)=15

\rm{comb}(9,2)=36

\rm{comb}(9,4)=126

\rm{comb}(9,6)=84

\rm{comb}(11,2)=55

\rm{comb}(11,4)=330

\rm{comb}(11,6)=462

\rm{comb}(11,9)=55

Thus, we should print 11 and 6.

Sample Input 2

2
100 0

Sample Output 2

100 0

Solution in C (GCC 5.4.1) (judge verdict: Runtime Error)

#include <stdio.h>
#include <stdlib.h>
#define MAX(x,y) x>y?x:y
typedef long long ll;
ll **memo,*a,N;

int cmpfunc (const void * a, const void * b) {
   return ( *(int*)a - *(int*)b );
}

ll cbn(ll n, ll r){
	if(r<0 || n<r) return 0;
	if(n==0) return 1;
	if(memo[n][r]==0 && memo[n][n-r]==0){
        memo[n][r]=cbn(n-1,r)+cbn(n-1,r-1); 
        printf("memo[%lld][%lld] just has been created!\n",n,r);
    }
	return MAX(memo[n][r],memo[n][n-r]);
}

int main(){
        ll max=0,ans=0;
	scanf("%lld",&N);
	a=malloc(sizeof(ll)*N);
	for(ll i=0;i<N;i++){
   	  scanf("%lld",&a[i]);
   	  max=MAX(max,a[i]);
   	}
        qsort(a,N,sizeof(ll),cmpfunc);
   	ll Size=a[N-1]+1;
	memo=malloc(sizeof(ll *) * Size);
	for(ll i=0;i<Size;i++) memo[i]=malloc(sizeof(ll)*Size);
	for(ll i=0;i<Size;i++)
	{
		for(ll j=0;j<Size;j++) memo[i][j]=0;
	}
	for(ll i=1;i<=N-1;i++){
            for(ll j=0;j<i;j++) ans=MAX(ans,cbn(a[i],a[j]));
        }
        printf("%lld",ans);
	return 0;
}