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# (Mono 4.6.2.0) (judge verdict: Accepted)

using System;
using System.Collections;
using System.Collections.Generic;
namespace Collections
{
	class program
	{
		static void Main(string[] args)
		{
			// 入力
			//string[] input = Console.ReadLine().Split(' '); // N, a
			int N = Int32.Parse(Console.ReadLine());

			int[] input = new int[N];
			int max = 0, num = 0; // N個の数字の中での最大値とその個数
			for(int i=0; i<N; i++)
			{
				int a = Int32.Parse(Console.ReadLine());
				input[i] = a;
				if(max < a)
				{
					max = a;
					num = 1;
				}
				else if(max == a)
				{
					num++;
				}
			}

			// num >= 2の場合は全て最大値を出力すればOK
			if(num >= 2)
			{
				for(int i=0; i<N; i++)
				{
					Console.WriteLine(max + "");
				}
			}
			else
			{
				for(int i=0; i<N; i++)
				{
					if(input[i] == max)
					{
						// maxより小さい中での最大値を探す
						int nextMax = 0;
						for(int j=0; j<N; j++)
						{
							if(i==j)
								continue;

							if(nextMax < input[j])
								nextMax = input[j];
						}
						Console.WriteLine(nextMax + "");
					}
					else
					{
						Console.WriteLine(max + "");
					}
				}
			}
    }
	}
}