#include <bits/stdc++.h>
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define endl '\n'
#define rep(i, a, b) for (int i = a; i < b; i++)
#define ff first
#define pii pair<int, int>
#define vii vector< pair<int,int> >
#define vi vector<int>
#define vvi vector< vector< int> >
#define vs vector<string>
#define ss second
#define pb push_back
#define mp make_pair
#define int long long
#define all(a) a.begin(), a.end()
#define inf (1LL<<61)
#define ull unsigned long long
#define trace1(x)                cout<<#x<<": "<<x<<endl
#define trace2(x, y)             cout<<#x<<": "<<x<<" | "<<#y<<": "<<y<<endl
#define trace4(x, y, z, d)          cout<<#x<<":" <<x<<" | "<<#y<<": "<<y<<" | "<<#z<<": "<<z<<" | "<<#d<<": "<<d<<endl
#define trace3(x, y, z)          cout<<#x<<":" <<x<<" | "<<#y<<": "<<y<<" | "<<#z<<": "<<z<<endl
#define debug1(x) cerr << #x << ": " << x <<'\n'
#define debug2(x, y) cerr << #x << ": " << x << '\t' << #y << ": " << y <<'\n'
#define debug3(x, y, z) cerr << #x << ": " << x << '\t' << #y << ": " << y << '\t' << #z << ": " << z <<'\n'
using namespace std;
//int dx[]={1,0,-1, 0};int dy[]={0,1,0, -1}; //4 Direction
//int dx[]={1,1,0,-1,-1,-1,0,1};int dy[]={0,1,1,1,0,-1,-1,-1};//8 direction
bool compare(const pair<pair<string,int>, int> &a,const pair<pair<string,int>, int> &b)
{
    if(a.ff.ff == b.ff.ff) {
        return (a.ff.ss > b.ff.ss);
    }
    return (a.ff.ff<b.ff.ff);
}
int poww(int a, int b)
{
    int res = 1;
    for(int i = 1; i<=b; ++i)
        res *= a;

    return res;
}
int findlcm(int arr[], int n) 
{ 
    // Initialize result 
    int ans = arr[0]; 
  
    // ans contains LCM of arr[0], ..arr[i] 
    // after i'th iteration, 
    for (int i = 1; i < n; i++) 
        ans = (((arr[i] * ans)) / 
                (__gcd(arr[i], ans))); 
  
    return ans; 
}
bool prime[100001];
void SieveOfEratosthenes(int n) 
{
    memset(prime, true, sizeof(prime));

    for (int p=2; p*p<=n; p++)
    {
        if (prime[p] == true)
        {
            for (int i=p*p; i<=n; i += p)
                prime[i] = false;
        }
  }
}

//Define mx for maximum range and MOD for large numbers
#define mx 100001
#define MOD 1000000007;
// Declare all the variables and global functions here - 
int n,m;
vector<pair<pii,int> > v;
int ind[mx] = {0};
vector<pair<int, string> > ans;
int32_t main()
{
    IOS;
 //    #ifndef ONLINE_JUDGE
 //    freopen("input.txt","r",stdin);
 //    freopen("output.txt","w",stdout);
	// #endif
    /********************* From here **********************/
    cin >> n >> m;
    rep(i, 0, m){
    	int a,b;
    	cin >> a >> b;
    	v.pb( {mp(b,a), i+1});
    }
    sort(all(v));

    rep(i, 0, v.size()){
    	ind[v[i].ff.ss]++;
    	string s = "";
    	int x = v[i].ff.ss;
    	int y = ind[v[i].ff.ss];
    	int cnt = 0;
    	int t = y;
    	//cerr << t<< endl;
    	while(t > 0){
    		s.push_back('1' +(t%10)-1 );
    		t = t/10;
    		cnt++;
    	}

    	rep(j, cnt, 6){
    		s+='0';
    	}
    	cnt = 0;

    	t = x;
    	//cerr << t<< endl;
    	while(t > 0){
    		s.push_back('1' +(t%10)-1 );
    		t = t/10;
    		cnt++;
    	}

    	rep(i, cnt, 6){
    		s+='0';
    	}

        
    	reverse(all(s));
    	//cerr << s << endl;
    	ans.pb(mp(v[i].ss, s) );
    }

    sort(all(ans) );
    rep(i, 0, ans.size()){
    	cout <<ans[i].ss  << endl;
    }

}

Measured memory_bytes: 11248