#include<bits/stdc++.h>
#define int long long
using namespace std;
#define N 1000010
int n,maxn,minn;
bool f[N];
struct node{int x,y,id;}p[N];
bool cmpx(node a,node b){return a.x<b.x;}
bool cmpy(node a,node b){return a.y<b.y;}
void update(int x){
maxn=max(maxn,x);
minn=min(minn,x);
return;
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++){
cin>>p[i].x>>p[i].y;
p[i].id=i;
}
sort(p+1,p+n+1,cmpy);
maxn=-1e18,minn=1e18;
for(int i=1;i<=n;i++){
int l=i-1;
while(l>0&&p[l].y==p[i-1].y){
update(p[l].x);
l--;
}
if(maxn<p[i].x||minn>p[i].x)f[p[i].id]=true;
}
maxn=-1e18,minn=1e18;
for(int i=n;i>0;i--){
int l=i+1;
while(l<=n&&p[l].y==p[i+1].y){
update(p[l].x);
l++;
}
if(maxn<p[i].x||minn>p[i].x)f[p[i].id]=true;
}
sort(p+1,p+n+1,cmpx);
maxn=-1e18,minn=1e18;
for(int i=1;i<=n;i++){
int l=i-1;
while(l>0&&p[l].x==p[i-1].x){
update(p[l].y);
l--;
}
if(maxn<p[i].y||minn>p[i].y)f[p[i].id]=true;
}
maxn=-1e18,minn=1e18;
for(int i=n;i>0;i--){
int l=i+1;
while(l<=n&&p[l].x==p[i+1].x){
update(p[l].y);
l++;
}
if(maxn<p[i].y||minn>p[i].y)f[p[i].id]=true;
}
for(int i=1;i<=n;i++){
if(f[i])cout<<'1';
else cout<<'0';
}
return 0;
}