Problem:
Score : 300 points

Problem Statement

Takahashi is a teacher responsible for a class of N students.

The students are given distinct student numbers from 1 to N.

Today, all the students entered the classroom at different times.

According to Takahashi's record, there were A_i students in the classroom when student number i entered the classroom (including student number i).

From these records, reconstruct the order in which the students entered the classroom.

Constraints

1 \le N \le 10^5

1 \le A_i \le N

A_i \neq A_j (i \neq j)

All values in input are integers.

Input

Input is given from Standard Input in the following format:

N
A_1 A_2 \ldots A_N

Output

Print the student numbers of the students in the order the students entered the classroom.

Sample Input 1

3
2 3 1

Sample Output 1

3 1 2

First, student number 3 entered the classroom.

Then, student number 1 entered the classroom.

Finally, student number 2 entered the classroom.

Sample Input 2

5
1 2 3 4 5

Sample Output 2

1 2 3 4 5

Sample Input 3

8
8 2 7 3 4 5 6 1

Sample Output 3

8 2 4 5 6 7 3 1

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

#include<stdio.h>

#define MAX_ARRAY 100001

void MergeSort(int array1[],int array2[],int Left,int Right){

    int i,j,k,center;
    int work_A[MAX_ARRAY],work_CO[MAX_ARRAY];

    if(Left<Right){
        center = (Left + Right)/2;
        MergeSort(array1,array2,Left,center);
        MergeSort(array1,array2,center+1,Right);

        for(i = center;i >= Left;i--){
            work_A[i] = array1[i];
            work_CO[i] = array2[i];
        }
        for(j = center + 1;j <= Right;j++){
            work_A[Right-(j-(center+1))] = array1[j];
            work_CO[Right-(j-(center+1))] = array2[j];
        }

        i = Left;
        j = Right;

        for(k = Left;k <= Right;k++){
            if(work_A[i] < work_A[j]){
                array1[k] = work_A[i];
                array2[k] = work_CO[i];
                i++;
            }else{
                array1[k] = work_A[j];
                array2[k] = work_CO[j];
                j--;
            }
        }
    }
}

int main(void){

    int A[MAX_ARRAY],ComeOrder[MAX_ARRAY];
    int N,i;

    scanf("%d",&N);
    for(i = 0;i < N;i++){
        scanf("%d",&A[i]);
        ComeOrder[i] = i+1;
    }

    /*printf("\nソート前；\n");
    for(i = 0;i < N;i++){
        printf("%d ",A[i]);
    }
    printf("\n");
    for(i = 0;i < N;i++){
        printf("%d ",ComeOrder[i]);
    }*/

    MergeSort(A,ComeOrder,0,N-1);

    /*printf("\nソート結果：\n");
    for(i = 0;i < N;i++){
        printf("%d ",A[i]);
    }
    printf("\n");*/
    for(i = 0;i < N;i++){
        printf("%d ",ComeOrder[i]);
    }

    printf("\n");

    return 0;
}