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 Java8 (OpenJDK 1.8.0) (judge verdict: Time Limit Exceeded)

import java.util.Scanner;

public class Main {
	//受け取った配列を昇順にする
	private static void sortArray(int array[]) {
		int swap;
		for(int i = 0;i < array.length - 1; i++) {
			for(int j = i;j < array.length;j++ ) {
				if(array[i] > array[j]) {
					swap = array[i];
					array[i] = array[j];
					array[j] = swap;
				}
			}
		}
	}

	//受け取った整数の桁数を返す
	private static int numDig(int p) {
//		int digit = 1;
//		int divide = 10;//貰った数を割り桁数を特定する
//		while(true) {
//			if( p/divide < 1 )break;
//			digit++;
//			divide *= 10;
//		}
		int digit = String.valueOf( p ).length();
		return digit;
	}

	/*県名(整数)と順番(整数)を受け取ると、認識番号の
	半分6桁を文字列で返す
	*/
	private static String
	halfId(int p){
		int digit = numDig(p);//桁数取得
		String zero = "";

		for(int i = 0; i < (6-digit); i++) {
			zero += '0';
		}
		String firstId = zero + p;
		return firstId;
	}

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        String Nstr = scan.next();
        String Mstr = scan.next();
        //N個の県があり、M個の市がある
        int N = Integer.parseInt(Nstr);
        int M = Integer.parseInt(Mstr);
        int[] P = new int[M];
        int[] Y = new int[M];
        String[] id = new String[M];

        for(int i = 0; i < M; i++) {
            String Pstr = scan.next();
            String Ystr = scan.next();
            P[i] = Integer.parseInt(Pstr);
            Y[i] = Integer.parseInt(Ystr);
        }
        //この時点でP配列とY配列は入力が終わっている

        int x = 1;//誕生した順番を示す
        int k = 0;//配列x専用の添え字
        int L = 0;//県の数を格納


    	for(int j = 1;j <= N; j++) {

    		for(int i = 0;i < M; i++) {
    			if(P[i] == j) {
    				L++;
    			}
    		}

            int[] Ysort = new int[L];
            L = 0;

    		for(int i = 0; i < M; i++) {
        		if(P[i] == j) {
        			Ysort[k] = Y[i];
        			k++;
        		}
        	}

    		k = 0;
    		sortArray(Ysort);
    		for(int i = 0; i < Ysort.length; i++) {
    			for(int l = 0; l < M; l++) {
    				if(Ysort[i] == Y[l]) {
    					id[l] = halfId(P[l])+halfId(x);
    					x++;
    				}
    			}
        	}
    		x = 1;
        }
    	for(int i=0;i<M;i++) {
    		System.out.println(id[i]);
    	}

    }
}