求调
#include<iostream>
#include<queue>
#include<string.h>
#include<vector>
#include<algorithm>
#define int long long
using namespace std;
int n,xx[1001],yy[1001],hh[1001],h1[1001],ct[1001],pp;
vector<int>g[1001],h[1001];
struct edge{int x2,y2,x3,y3;}e[1001];
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
while(1){
cin>>n;
if(n==0)break;
pp++;
if(pp!=1)cout<<'\n';
memset(hh,0,sizeof(hh));
memset(h1,0,sizeof(h1));
memset(ct,0,sizeof(ct));
for(int i=1;i<=n;i++){
g[i].clear();
h[i].clear();
}
for(int i=1;i<=n;i++)cin>>e[i].x2>>e[i].x3>>e[i].y2>>e[i].y3;
for(int i=1;i<=n;i++)cin>>xx[i]>>yy[i];
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(e[i].x2<=xx[j]&&xx[j]<=e[i].x3&&e[i].y2<=yy[j]&&yy[j]<=e[i].y3){
h[j].push_back(i);
g[i].push_back(j);
hh[i]++;
}
queue<int>q;
for(int i=1;i<=n;i++)
if(hh[i]==1)
q.push(i);
int ggg=0;
while(!q.empty()){
int u=q.front();
q.pop();
ggg++;
for(int i=0;i<g[u].size();i++)
if(!h1[g[u][i]]){
h1[g[u][i]]=1;
ct[u]=g[u][i];
break;
}
for(int i=0;i<h[ct[u]].size();i++){
hh[h[ct[u]][i]]--;
if(hh[h[ct[u]][i]]==1)
q.push(h[ct[u]][i]);
}
}
cout<<"Heap "<<pp<<'\n';
if(!ggg){
cout<<"none"<<endl;
continue;
}
for(int i=1;i<=n;i++){
if(ct[i]&&i==n)cout<<"("<<char('A'+i-1)<<","<<ct[i]<<")";
else if(ct[i])cout<<"("<<char('A'+i-1)<<","<<ct[i]<<") ";
}
cout<<'\n';
}
return 0;
}