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: Runtime Error)

#include<stdio.h>
#include<stdlib.h>

typedef struct{
    int *a;
    int num;
}person_t;

void swap (person_t *x, person_t *y) {
  person_t temp;    // 値を一時保存する変数

  temp = *x;
  *x = *y;
  *y = temp;
}

/***
* pivotを決め、
* 全データをpivotを境目に振り分け、
* pivotの添え字を返す
***/
int partition (person_t p[], int left, int right) {
  int i, j, pivot;
  i = left;
  j = right + 1;
  pivot = left;   // 先頭要素をpivotとする

  do {
    do { i++; } while (p[i].a < p[pivot].a);
    do { j--; } while (p[pivot].a < p[j].a);
    // pivotより小さいものを左へ、大きいものを右へ
    if (i < j) { swap(&p[i], &p[j]); }
  } while (i < j);

  swap(&p[pivot], &p[j]);   //pivotを更新

  return j;
}

/* クイックソート */
void quick_sort (person_t p[], int left, int right) {
  int pivot;

  if (left < right) {
    pivot = partition(p, left, right);
    quick_sort(p, left, pivot-1);   // pivotを境に再帰的にクイックソート
    quick_sort(p, pivot+1, right);
  }
}

int main(void){
    int N;
    person_t *person;
    scanf("%d",&N);
    person = malloc(sizeof(person_t)*N);
    for(int i=0;i<N;i++){
        scanf("%d",&person[i].a);
        person[i].num = i+1;
    }
    quick_sort(person,0,N-1);
    for(int i=0;i<N;i++) printf("%d ",person[i].num);
    return 0;
}