#include<bits/stdc++.h>
#define MAXN (int)15e2+5
using namespace std;
int n;
int v[MAXN][MAXN],p[MAXN],s[MAXN];
int find(int x){
return p[x]=(p[x]==x?x:find(p[x]));
}void unite(int a,int b){
a=find(a);
b=find(b);
if(a==b){return;}
if(s[a]<s[b]){swap(a,b);}
s[a]+=s[b];
p[b]=a;
for(int i=0;i<n;i++){
if(v[b][i]){
v[a][i]+=v[b][i];
v[i][a]+=v[b][i];
v[b][i]=v[i][b]=0;
}
}
}
void initialize(int N) {
n=N;
for(int i=0;i<n;i++){
p[i]=i;
s[i]=1;
}
}
int hasEdge(int a,int b){
a=find(a);b=find(b);
v[a][b]++;v[b][a]++;
if(v[a][b]==s[a]*s[b]){
unite(a,b);
return 1;
}
return 0;
}