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: Accepted)

import java.io.*;
import java.util.*;


public class Main {


  class ID implements Comparable<ID> {
    int index;
    int prefecture;
    int year;
    String id;

    public ID(int index, int prefecture, int year) {
      this.index = index;
      this.prefecture = prefecture;
      this.year = year;
    }

    @Override
    public boolean equals(Object o) {
      if (this == o) return true;
      if (o == null || getClass() != o.getClass()) return false;
      ID id1 = (ID) o;
      return index == id1.index &&
              prefecture == id1.prefecture &&
              year == id1.year &&
              Objects.equals(id, id1.id);
    }

    @Override
    public int hashCode() {
      return Objects.hash(index, prefecture, year, id);
    }

    @Override
    public int compareTo(ID o) {
      return this.year - o.year;
    }
  }

  private void solve(InputReader in, PrintWriter out) {
    int n = in.nextInt();
    int m = in.nextInt();
    ArrayList<ID> list = new ArrayList<>();
    int arr[] = new int[n + 1];
    for (int i = 0; i < m; i++) {
      int index = in.nextInt();
      list.add(new ID(i, index, in.nextInt()));
      arr[index]++;
    }
    int[] tmp = new int[n + 1];
    if (n + 1 >= 0) System.arraycopy(arr, 0, tmp, 0, n + 1);
    Collections.sort(list);
    for (int i = 0; i < m; i++) {
      list.get(i).id = String.valueOf(arr[list.get(i).prefecture] + 1 - tmp[list.get(i).prefecture]--);
    }
    list.sort(Comparator.comparingInt(a -> a.index));
    for (int i = 0; i < m; i++) {
      StringBuilder val = new StringBuilder(String.valueOf(list.get(i).prefecture));
      StringBuilder val2 = new StringBuilder(String.valueOf(list.get(i).id));
      int len = val.length();
      int len2 = val2.length();
      if (val.length() < 6) {
        for (int j = 0; j < 6 - len; j++) {
          val.insert(0, "0");
        }
      }
      if (val2.length() < 6) {
        for (int j = 0; j < 6 - len2; j++) {
          val2.insert(0, "0");
        }
      }
      out.println(val.toString() + val2.toString());
    }


  }


  public static void main(String[] args) throws FileNotFoundException {
    new Main().run();
  }

  private void run() throws FileNotFoundException {

    //new FileInputStream(new File("input.txt"))
    //
    try (InputReader in = new InputReader(System.in);
         PrintWriter out = new PrintWriter(System.out)) {
      solve(in, out);
    }
  }


  static class InputReader implements AutoCloseable {
    private BufferedReader reader;
    private StringTokenizer tokenizer;

    InputReader(InputStream stream) {
      reader = new BufferedReader(new InputStreamReader(stream), 32768);
      tokenizer = null;
    }

    String next() {
      while (tokenizer == null || !tokenizer.hasMoreTokens()) {
        try {
          tokenizer = new StringTokenizer(reader.readLine());
        } catch (IOException e) {
          throw new RuntimeException(e);
        }
      }
      return tokenizer.nextToken();
    }

    public int nextInt() {
      return Integer.parseInt(next());
    }

    public long nextLong() {
      return Long.parseLong(next());
    }

    public double nextDouble() {
      return Double.parseDouble(next());
    }

    @Override
    public void close() {
    }
  }

}