#include<bits/stdc++.h>
using namespace std;
const int N=200005;
map<pair<int,int>,int> mp,vis;
map<pair<int,int>,pair<int,int> > ans;
int n,x[N],y[N];
int dr[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d%d",&x[i],&y[i]);
mp[{x[i],y[i]}]=1;
}
queue<pair<int,int>> q;
for(int i=1;i<=n;i++){
for(int j=0;j<4;j++){
int xx=x[i]+dr[j][0],yy=y[i]+dr[j][1];
if(mp.count({xx,yy})==0){
ans[{x[i],y[i]}]={xx,yy};
q.push({x[i],y[i]});
vis[{x[i],y[i]}]=1;
continue;
}
}
}
while(q.size()){
auto tp=q.front();q.pop();
int x=tp.first,y=tp.second;
for(int j=0;j<4;j++){
int xx=x+dr[j][0],yy=y+dr[j][1];
if(mp.count({xx,yy})==1&&vis[{xx,yy}]==0){
vis[{xx,yy}]=1;
ans[{xx,yy}]=ans[{x,y}];
q.push({xx,yy});
}
}
}
for(int i=1;i<=n;i++){
cout<<ans[{x[i],y[i]}].first<<" "<<ans[{x[i],y[i]}].second<<endl;
}
}
|