Problem:
Score: 300 points

Problem Statement

In Republic of Atcoder, there are N prefectures, and a total of M cities that belong to those prefectures.

City i is established in year Y_i and belongs to Prefecture P_i.

You can assume that there are no multiple cities that are established in the same year.

It is decided to allocate a 12-digit ID number to each city.

If City i is the x-th established city among the cities that belong to Prefecture i, the first six digits of the ID number of City i is P_i, and the last six digits of the ID number is x.

Here, if P_i or x (or both) has less than six digits, zeros are added to the left until it has six digits.

Find the ID numbers for all the cities.

Note that there can be a prefecture with no cities.

Constraints

1 \leq N \leq 10^5

1 \leq M \leq 10^5

1 \leq P_i \leq N

1 \leq Y_i \leq 10^9

Y_i are all different.

All values in input are integers.

Input

Input is given from Standard Input in the following format:

N M
P_1 Y_1
:
P_M Y_M

Output

Print the ID numbers for all the cities, in ascending order of indices (City 1, City 2, ...).

Sample Input 1

2 3
1 32
2 63
1 12

Sample Output 1

000001000002
000002000001
000001000001

As City 1 is the second established city among the cities that belong to Prefecture 1, its ID number is 000001000002.

As City 2 is the first established city among the cities that belong to Prefecture 2, its ID number is 000002000001.

As City 3 is the first established city among the cities that belong to Prefecture 1, its ID number is 000001000001.

Sample Input 2

2 3
2 55
2 77
2 99

Sample Output 2

000002000001
000002000002
000002000003

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

#include<stdio.h>
#include<stdlib.h>
 
#define NEW(p,n){p=malloc((n)*sizeof(p[0]));if(p==NULL){printf("not enough memory\n");exit(1);};}
//pの型の変数n個の要素分のメモリを確保し、そのアドレスをpに代入するマクロ
 
#define MAX(a, b) ((a) > (b) ? (a) : (b))
#define MIN(a, b) ((a) < (b) ? (a) : (b))
 
typedef struct{
    int name;
    int prefecture;
    int year;
    int id;
}city;
 
//cityをprefecture昇順→yearの昇順に並び替え
int city_asc(const void* a, const void* b){
    city p=*(city*)a;
    city q=*(city*)b;
 
    if(p.prefecture-q.prefecture>0) return 1;
    else if(p.prefecture-q.prefecture<0) return -1;
    else{
        if(p.year-q.year>0) return 1;
        else if(p.year-q.year<0) return -1;
    }
    return 0;
}
 
int name_asc(const void* a, const void* b){
    city p=*(city*)a;
    city q=*(city*)b;
 
    return p.name-q.name;
}
 
void print_number(int N){
    int digit=1;
    while(N/10!=0){
        digit++;
        N=N/10;
    }
 
    for(int i=1;i<=(6-digit);i++){
        printf("0");
    }
    printf("%d",N);
 
    return;
}
 
int main(void){
    int N,M;
    scanf("%d%d",&N,&M);
 
    //C[0]~C[M-1]に格納→昇順ソート
    city* C;
    NEW(C,M);
    for(int i=0;i<M;i++){
        C[i].name=i;
        scanf("%d",&C[i].prefecture);
        scanf("%d",&C[i].year);
        C[i].id=0;
    }
    qsort(C,M,sizeof(city),city_asc);
 
    //認識番号をそれぞれidに格納
    C[0].id=1;
    for(int i=1;i<M;i++){
        if(C[i].prefecture==C[i-1].prefecture) C[i].id=C[i-1].id+1;
        else C[i].id=1;
    }
 
    //入力順に並び替え
    qsort(C,M,sizeof(city),name_asc);
 
    for(int i=0;i<M;i++){
        printf("%06d%06d\n",C[i].prefecture,C[i].id);
    }
 
    return 0;
}