#include<bits/stdc++.h>
using namespace std;
const int m=5010;
struct node{
int a,b,c,d,key;
}s[m];
int n,s1[m],s2[m],mp[m];
int cmp1(node q,node p){
if(q.c!=p.c)return q.c<p.c;
return q.a>p.a;
}
int cmp2(node q,node p){
if(q.d!=p.d)return q.d<p.d;
return q.b>p.b;
}
int tx1(){
int i,j,ok;
for(i=1;i<=n;i++){
ok=0;
for(j=s[i].a;j<=s[i].c;j++)
if(mp[j]==0){
mp[j]=1;
s1[s[i].key]=j;
ok=1;
break;
}
if(ok==0)return 0;
}
return 1;
}
int tx2(){
int i,j,ok;
for(i=1;i<=n;i++){
ok=0;
for(j=s[i].b;j<=s[i].d;j++)
if(mp[j]==0){
mp[j]=1;
s2[s[i].key]=j;
ok=1;
break;
}
if(ok==0)return 0;
}
return 1;
}
int main(){
int i,t1,t2;
while(scanf("%d",&n)&&n){
for(i=1;i<=n;i++){
scanf("%d%d%d%d",&s[i].a,&s[i].b,&s[i].c,&s[i].d);
s[i].key=i;
}
memset(mp,0,sizeof(mp));
sort(s+1,s+1+n,cmp1);
t1=tx1();
memset(mp,0,sizeof(mp));
sort(s+1,s+1+n,cmp2);
t2=tx2();
if(t1==0||t2==0)puts("IMPOSSIBLE");
else for(i=1;i<=n;i++)
printf("%d %d\n",s1[i],s2[i]);
}
return 0;
}
UVA 11134 Fabled Rooks
最新推荐文章于 2022-04-11 21:18:59 发布