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 (GCC 5.4.1) (judge verdict: Wrong Answer)

#include<stdio.h>
#include<stdlib.h>
void qsort(
	void* base, size_t num, size_t size,
	int(*compare)(const void* a, const void* b)
);
int desc(const void* a, const void* b) {
	return *(int*)b - *(int*)a;
}
int main(void) {
	int n;

	scanf("%d", &n);

	int i, j;
	int point[200000];
	
	

	for (i = 0; i < n; i++) {
		scanf("%d", &point[i]);
	}


	/*for (i = 0; i < n/2; i++) {
		kizyun[i] = point[i];
	}

	qsort(point, sizeof(point) / sizeof(*point), sizeof(*point), desc);
	

	for (i = 0; i < n/2; i++) {
		printf("%d\n", kizyun[i]);
	}

	for (i = 0; i < n; i++) {
		if (point[i] != kizyun[i]){
			printf("%d\n", point[i]);
	}else{
			for (int j = i; j < n; j++) {
				if (point[j] != kizyun[i]) {
					printf("%d\n", point[i]);
					break;
				}
			}
		
	}*/

	int max = point[0];
	int nextmax = 0;
	int a = 0;
	int b = 0;
	int temp;
	for (i = 0; i < n; i++) {
		if (max < point[i]) {
			temp = max;
			max = point[i];
			nextmax = temp;
			temp = a;
			a = i;
			b = temp;
		}
		else if (nextmax < point[i]) {
			nextmax = point[i];
		}
	}


	for (i = 0; i < n; i++) {
		if (a != i) {
			printf("%d\n", max);
		}
		else {
			printf("%d\n", nextmax);
		}
	}



	

	
	return 0;
}