Problem:
Score : 300 points

Problem Statement

You are given a sequence of length N: A_1, A_2, ..., A_N.
For each integer i between 1 and N (inclusive), answer the following question:

Find the maximum value among the N-1 elements other than A_i in the sequence.

Constraints

2 \leq N \leq 200000

1 \leq A_i \leq 200000

All values in input are integers.

Input

Input is given from Standard Input in the following format:

N
A_1
:
A_N

Output

Print N lines. The i-th line (1 \leq i \leq N) should contain the maximum value among the N-1 elements other than A_i in the sequence.

Sample Input 1

3
1
4
3

Sample Output 1

4
3
4

The maximum value among the two elements other than A_1, that is, A_2 = 4 and A_3 = 3, is 4.

The maximum value among the two elements other than A_2, that is, A_1 = 1 and A_3 = 3, is 3.

The maximum value among the two elements other than A_3, that is, A_1 = 1 and A_2 = 4, is 4.

Sample Input 2

2
5
5

Sample Output 2

5
5

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

#include <cstdio>
#include <algorithm>
#define LL long long
#define NUM 200000
using namespace std;

int main()
{
  LL N,A[NUM],i,maxval,next_max,maxvc;
 
  scanf("%lld",&N);
 	
  for(i=0;i<N;i++){
    scanf("%lld\n",&A[i]);
  }
  
  //最大値の取得
  maxval = A[0];
  for(i=0;i<N;i++){
    if(maxval<A[i]){
    	maxval=A[i];
    }
  }
  //最大値の個数を取得
  maxvc=0;
  for(i=0;i<N;i++){
    if(A[i]==maxval){
      maxvc++;
    }
  }
  
    
  //最大値の次に大きな値の取得
  next_max = A[0];
  //next_maxの値が最大値でないかどうかの確認
  if(next_max==maxval){
    
  	next_max=A[1];
    i=1;
    for(i;i<N;i++){
      if(next_max<A[i]){
          next_max=A[i];
      }
    }

  }else{
    
  	i=0;
	for(i;i<N;i++){
      if(next_max<A[i]&&A[i]!=maxval){
          next_max=A[i];
      }
 	}
  
  
  }
  
  
  
  //出力
  for(i=0;i<N;i++){
    if(A[i]!=maxval){
    	printf("%lld\n",maxval);
    }else{
      if(maxvc==1){
      	printf("%lld\n",next_max);
      }else{
      	printf("%lld\n",maxval);
      }
    	
    }
  }
  
 	
  	return 0;
  
}