#include <cstdio>
using namespace std;
int main( void ) {
int n,i,t,test,pos,s,v,temp,size,offset,off2;
long long int ll;
scanf ( "%d" ,& n) ;
int * p= new int [ 2 * n] ; // megoldast tarolom itt
int * coords= new int [ 4 * n] ; // input koordinatakhoz
int * cnt= new int [ n+ 1 ] ;
int * id= new int [ n] ;
long long int * A= new long long int [ n+ 1 ] ; // kupac (legfeljebb) n elemu, de szamozas 1-tol kezdodik!
for ( i= 0 ; i< 4 * n; i++ ) scanf ( "%d" ,& coords[ i] ) ;
for ( test= 1 ,t= 0 ; test&& t< 2 ; t++ ) {
// elemek rendezese bal vegpont szerint novekvo sorrendben O(n) idoben
for ( i= 0 ; i<= n; i++ ) cnt[ i] = 0 ;
for ( i= 0 ; i< n; i++ ) cnt[ coords[ 4 * i+ t] ] ++ ;
for ( s= 0 ,i= 1 ; i<= n; i++ ) { temp= cnt[ i] ; cnt[ i] = s; s+ = temp; }
for ( i= 0 ; i< n; i++ ) { v= coords[ 4 * i+ t] ; id[ cnt[ v] ] = i; cnt[ v] ++ ; }
for ( pos= i= size= 0 ; i< n; i++ ) {
while ( pos< n&& coords[ 4 * id[ pos] + t] == i+ 1 ) {
ll= coords[ 4 * id[ pos] + t+ 2 ] ;
ll= ( ll<< 20 ) + id[ pos] ; // felso 20 biten a jobb vegpont koordinataja, also 20 biten az (eredeti) pozicio tarolasa
pos++ ;
for ( size++ ,offset= size; offset> 1 && A[ offset>> 1 ] > ll; A[ offset] = A[ offset>> 1 ] ,offset>>= 1 ) ; // uj elem hozzaadasa a kupachoz, kupacot a jobb vegpont szerint rendezem
A[ offset] = ll;
}
// itt a kupac mindegyik elemenek bal vegpontja kisebb, mint (i+1), igy, ha megoldhato a feladat, akkor
// olyan megoldas is van, amiben a kupac legkisebb elemenel (i+1)-et valasztottunk a bastya (megfelelo) koordinatajanak
// azaz a moho algoritmus itt mukodik
if ( size== 0 ) { test= 0 ; break ; } // kupacom ures, nem megoldhato a feladat
ll= A[ 1 ] ; // ez a legkisebb elem a kupacban
if ( ( ll>> 20 ) < i+ 1 ) { test= 0 ; break ; } // kupac legkisebb elemenek jobb vegpontja kisebb, mint (i+1), feladat nem megoldhato
p[ 2 * ( ll& 1048575 ) + t] = i+ 1 ; // megoldas koordinatajanak tarolasa
ll= A[ size] ;
size-- ;
offset= 1 ;
while ( 1 ) { // elem sullyesztese a kupacban
off2= 2 * offset;
if ( off2> size) break ;
if ( off2< size&& A[ off2] > A[ off2+ 1 ] ) off2++ ;
if ( A[ off2] > ll) break ;
A[ offset] = A[ off2] ;
offset= off2;
}
A[ offset] = ll;
} }
if ( test) { for ( i= 0 ; i< n; i++ ) printf ( "%d %d\n " ,p[ 2 * i] ,p[ 2 * i+ 1 ] ) ; }
else printf ( "NEM\n " ) ;
return 0 ;
}
I2luY2x1ZGUgPGNzdGRpbz4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCgppbnQgbWFpbih2b2lkKXsKICAKICAgIGludCBuLGksdCx0ZXN0LHBvcyxzLHYsdGVtcCxzaXplLG9mZnNldCxvZmYyOwogICAgbG9uZyBsb25nIGludCBsbDsKICAgIAogICAgc2NhbmYoIiVkIiwmbik7CiAgICBpbnQgKnA9bmV3IGludFsyKm5dOy8vIG1lZ29sZGFzdCB0YXJvbG9tIGl0dAogICAgaW50ICpjb29yZHM9bmV3IGludFs0Km5dOy8vIGlucHV0IGtvb3JkaW5hdGFraG96CiAgICBpbnQgKmNudD1uZXcgaW50W24rMV07CiAgICBpbnQgKmlkPW5ldyBpbnRbbl07CiAgICBsb25nIGxvbmcgaW50ICpBPW5ldyBsb25nIGxvbmcgaW50W24rMV07Ly8ga3VwYWMgKGxlZ2ZlbGplYmIpIG4gZWxlbXUsIGRlIHN6YW1vemFzIDEtdG9sIGtlemRvZGlrIQoKICAgIGZvcihpPTA7aTw0Km47aSsrKXNjYW5mKCIlZCIsJmNvb3Jkc1tpXSk7CgogICAgZm9yKHRlc3Q9MSx0PTA7dGVzdCYmdDwyO3QrKyl7CiAgICAgIC8vIGVsZW1layByZW5kZXplc2UgYmFsIHZlZ3BvbnQgc3plcmludCBub3Zla3ZvIHNvcnJlbmRiZW4gTyhuKSBpZG9iZW4KICAgICAgZm9yKGk9MDtpPD1uO2krKyljbnRbaV09MDsKICAgICAgZm9yKGk9MDtpPG47aSsrKWNudFtjb29yZHNbNCppK3RdXSsrOwogICAgICBmb3Iocz0wLGk9MTtpPD1uO2krKyl7dGVtcD1jbnRbaV07Y250W2ldPXM7cys9dGVtcDt9CiAgICAgIGZvcihpPTA7aTxuO2krKyl7dj1jb29yZHNbNCppK3RdO2lkW2NudFt2XV09aTtjbnRbdl0rKzt9CiAgICAgIAogICAgICBmb3IocG9zPWk9c2l6ZT0wO2k8bjtpKyspewogICAgICAgICB3aGlsZShwb3M8biYmY29vcmRzWzQqaWRbcG9zXSt0XT09aSsxKXsKCSAgICAgICBsbD1jb29yZHNbNCppZFtwb3NdK3QrMl07CgkgICAgICAgbGw9KGxsPDwyMCkraWRbcG9zXTsvLyBmZWxzbyAyMCBiaXRlbiBhIGpvYmIgdmVncG9udCBrb29yZGluYXRhamEsIGFsc28gMjAgYml0ZW4gYXogKGVyZWRldGkpIHBvemljaW8gdGFyb2xhc2EKCSAgICAgICBwb3MrKzsKCSAgICAgICBmb3Ioc2l6ZSsrLG9mZnNldD1zaXplO29mZnNldD4xJiZBW29mZnNldD4+MV0+bGw7QVtvZmZzZXRdPUFbb2Zmc2V0Pj4xXSxvZmZzZXQ+Pj0xKTsvLyB1aiBlbGVtIGhvenphYWRhc2EgYSBrdXBhY2hveiwga3VwYWNvdCBhIGpvYmIgdmVncG9udCBzemVyaW50IHJlbmRlemVtCgkgICAgICAgQVtvZmZzZXRdPWxsOwoJIH0KCSAvLyBpdHQgYSBrdXBhYyBtaW5kZWd5aWsgZWxlbWVuZWsgYmFsIHZlZ3BvbnRqYSBraXNlYmIsIG1pbnQgKGkrMSksIGlneSwgaGEgbWVnb2xkaGF0byBhIGZlbGFkYXQsIGFra29yCgkgLy8gb2x5YW4gbWVnb2xkYXMgaXMgdmFuLCBhbWliZW4gYSBrdXBhYyBsZWdraXNlYmIgZWxlbWVuZWwgKGkrMSktZXQgdmFsYXN6dG90dHVuayBhIGJhc3R5YSAobWVnZmVsZWxvKSBrb29yZGluYXRhamFuYWsKCSAvLyBhemF6IGEgbW9obyBhbGdvcml0bXVzIGl0dCBtdWtvZGlrCgkgCgkgaWYoc2l6ZT09MCl7dGVzdD0wO2JyZWFrO30vLyBrdXBhY29tIHVyZXMsIG5lbSBtZWdvbGRoYXRvIGEgZmVsYWRhdAoJIGxsPUFbMV07Ly8gZXogYSBsZWdraXNlYmIgZWxlbSBhIGt1cGFjYmFuCgkgaWYoKGxsPj4yMCk8aSsxKXt0ZXN0PTA7YnJlYWs7fS8vIGt1cGFjIGxlZ2tpc2ViYiBlbGVtZW5layBqb2JiIHZlZ3BvbnRqYSBraXNlYmIsIG1pbnQgKGkrMSksIGZlbGFkYXQgbmVtIG1lZ29sZGhhdG8KCSBwWzIqKGxsJjEwNDg1NzUpK3RdPWkrMTsvLyBtZWdvbGRhcyBrb29yZGluYXRhamFuYWsgdGFyb2xhc2EKCSAKCSBsbD1BW3NpemVdOwoJIHNpemUtLTsKCSBvZmZzZXQ9MTsKCSB3aGlsZSgxKXsvLyBlbGVtIHN1bGx5ZXN6dGVzZSBhIGt1cGFjYmFuCgkgICAgICAgb2ZmMj0yKm9mZnNldDsKCSAgICAgICBpZihvZmYyPnNpemUpYnJlYWs7CgkgICAgICAgaWYob2ZmMjxzaXplJiZBW29mZjJdPkFbb2ZmMisxXSlvZmYyKys7CgkgICAgICAgaWYoQVtvZmYyXT5sbClicmVhazsKCSAgICAgICBBW29mZnNldF09QVtvZmYyXTsKCSAgICAgICBvZmZzZXQ9b2ZmMjsKCSB9CgkgQVtvZmZzZXRdPWxsOwogICAgfX0gICAgCiAgICAKICAgIGlmKHRlc3Qpe2ZvcihpPTA7aTxuO2krKylwcmludGYoIiVkICVkXG4iLHBbMippXSxwWzIqaSsxXSk7fQogICAgZWxzZSBwcmludGYoIk5FTVxuIik7CgogICAgcmV0dXJuIDA7Cn0K