#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <string>
#include <vector>
#include <cassert>
#include <map>
using namespace std;
typedef long long LL;
const int INF=1e7;

int n;
int f[110][110],c[110];
int h[110];

int dfs(int s){
    h[s]=1;
    int cc[5]={};
    memset(cc,0,sizeof(cc));
    for (int i=1; i<=n; i++)
        if (s!=i && f[s][i] && h[i]) cc[c[i]]=1;

    for (int k=1; k<=4; k++) if (!cc[k]){
        c[s]=k;
        int flag=1;
        for (int i=1; i<=n; i++)
            if (s!=i && f[s][i] && !h[i])
                if (dfs(i)==0){ flag=0; break; }
        if (flag) return 1;
    }
    h[s]=0;
    return 0;
}

int checker(){
    for (int i=1; i<=n; i++){
        if (!c[i]) return 0;
        for (int j=1; j<=n; j++) if (i!=j && f[i][j] && c[i]==c[j]) return 0;
    }
    return 1;
}

int check(char ss[]){
    int len=strlen(ss);
    for (int i=0; i<len; i++)
        if (ss[i]=='-') return 1;
    return 0;
}

int main(){
    char ss[100];
    scanf("%d",&n);
    while (scanf("%s",ss)!=EOF){
        memset(f,0,sizeof(f));
        while (check(ss)){
            int u,v;
            sscanf(ss,"%d-%d",&u,&v);
            f[u][v]=1; f[v][u]=1;
            if (scanf("%s",ss)==EOF) break;
        }
        memset(h,0,sizeof(h));
        memset(c,0,sizeof(c));
        for (int i=1; i<=n; i++)
            if (c[i]==0) dfs(i);
        for (int i=1; i<=n; i++) printf("%d %d\n",i,c[i]);

        sscanf(ss,"%d",&n);
    }
    return 0;
}

