#include<iostream>
#include<stack>
#include<cstring>
using namespace std;
const int MAXN=1000;
int outd[MAXN],ans[MAXN];
int n;
bool a[MAXN][MAXN];
stack<int> st;
struct slide{
int x_min,x_max,y_min,y_max;
} s[MAXN];
struct letter{
int x,y;
} l[MAXN];
bool judge(int i,int j)
{
if (l[i].x>=s[j].x_min && l[i].x<=s[j].x_max && l[i].y>=s[j].y_min && l[i].y<=s[j].y_max) return true;
else return false;
}
void print()
{
char ch;
int b[MAXN];
for (int i=1; i<=n; i++) b[ans[i]]=i;
for (int i=1; i<=n; i++)
{
ch=i-1+'A';
cout<<ch<<' '<<b[i]<<endl;
}
}
int main()
{
int i,j,temp,num=0,item;
memset(outd,0,sizeof(outd));
cin>>n;
for (i=1; i<=n; i++) cin>>s[i].x_min>>s[i].x_max>>s[i].y_min>>s[i].y_max;
for (i=1; i<=n; i++)
{
cin>>l[i].x>>l[i].y;
for (j=1; j<=n; j++)
{
a[i][j]=judge(i,j);
if (a[i][j]) outd[i]++;
}
}
for (i=1; i<=n; i++)
if (outd[i]==1)
{
st.push(i);
for (j=1; j<=n ;j++)
if (a[i][j])
{
a[i][j]=false;
ans[i]=j;
num++;
break;
}
outd[i]=0;
}
while (!st.empty())
{
temp=st.top();
st.pop();
item=ans[temp];
for (i=1; i<=n; i++)
if(a[i][item])
{
a[i][item]=false;
outd[i]--;
}
for (i=1; i<=n; i++)
if (outd[i]==1)
{
st.push(i);
for (j=1; j<=n ;j++)
if (a[i][j])
{
a[i][j]=false;
ans[i]=j;
num++;
break;
}
outd[i]=0;
}
}
if (num==n) print();
else cout<<"None"<<endl;
}