#include <bits/stdc++.h>
using namespace std;
const int MAXN=100005;
bool vis[MAXN];
int father[MAXN];
struct edge{
int u;
int v;
}e;
vector<edge> edges;
void Init(int n){
for(int i=0;i<=n;i++)
father[i]=i;
}
int findfather(int x){
int a=x;
while(x!=father[x]){
x=father[x];
}
while(a!=father[a]){
int z=a;
a=father[a];
father[z]=x;
}
}
bool Union(int a,int b){
int faA=findfather(a);
int faB=findfather(b);
if(faA!=faB){
father[faA]=faB;
return false;
}
return true;
}
int valid(int n){
Init(n);
for(int i=0;i<edges.size();i++){
if(Union(edges[i].u,edges[i].v)){
return 0;
}
}
int flag=1;
int ans=0;
for(int i=0;i<n;i++){
if(vis[i]==true&&father[i]==i){
ans++;
if(ans==2){
flag=0;
break;
}
}
}
return flag;
}
int main(){
int u,v;
int maxnum=-1;
while(cin>>u>>v){
if(u==-1&&v==-1)
break;
if(u==0&&v==0){
cout<<valid(maxnum)<<endl;
edges.clear();
maxnum=-1;
}
else{
e.u=u;
e.v=v;
edges.push_back(e);
vis[u]=true,vis[v]=true;
maxnum=max(max(u,v),maxnum);
}
}
}