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 (Clang 3.8.0) (judge verdict: Accepted)

#include<stdio.h>
int a[100004][2],b[100004];
void fun(int n,int m)
{
    int i,j,s,p,w;
    if(n>m)
        return;
    i=n;
    j=m;
    s=a[i][0];
    w=a[i][1];
    while(i!=j)
    {
        while((a[j][0]>s||(a[j][0]==s&&a[j][1]>=w))&&i<j)
            j--;
        while((a[i][0]<s||(a[i][0]==s&&a[i][1]<=w))&&i<j)
            i++;
        if(i<j)
        {
            p=a[i][0];
            a[i][0]=a[j][0];
            a[j][0]=p;
            p=a[i][1];
            a[i][1]=a[j][1];
            a[j][1]=p;
            p=b[i];
            b[i]=b[j];
            b[j]=p;
        }
    }
    a[n][0]=a[i][0];
    a[n][1]=a[i][1];
    a[i][0]=s;
    a[i][1]=w;
    p=b[n];
    b[n]=b[i];
    b[i]=p;
    fun(n,i-1);
    fun(i+1,m);
    return;
}
int main()
{
    int n,m,i,j,s,w,c[100004],d[100004][2];
    while(~scanf("%d %d",&n,&m))
    {
        for(i=1;i<=m;i++)
        {
            scanf("%d %d",&a[i][0],&a[i][1]);
            b[i]=i;
            d[i][0]=a[i][0];
            d[i][1]=a[i][1];
        }
        fun(1,m);
        for(i=1;i<=m;i++)
        {
            if(i==1||a[i][0]!=a[i-1][0])
                c[b[i]]=1;
            else
                c[b[i]]=c[b[i-1]]+1;
        }
        for(i=1;i<=m;i++)
            printf("%06d%06d\n",d[i][0],c[i]);
    }
    return 0;
}