#pragma comment(linker, "/STACK:60777216") #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long double ld; typedef long long ll; typedef pair pii; typedef pair pdd; typedef vector vi; typedef vector vd; typedef pair pl; #define FOR(i,a,b) for(int i=(a);i<(b);i++) #define REP(i,n) FOR(i,0,n) #define SORT(v) sort((v).begin(),(v).end()) #define UN(v) SORT(v),(v).erase(unique((v).begin(),(v).end()),(v).end()) #define CL(a,b) memset(a,b,sizeof a) #define pb push_back int n,m; int x[111111]; int y[111111]; int ex[333333]; int ey[333333]; vector v[111111]; bool u[666666]; vi w[666666]; int c; void dfs(int ver){ if(u[ver]) return; c++; u[ver]=true; REP(i,w[ver].size()) dfs(w[ver][i]); } int main(){ #ifdef LocalHost freopen("input.txt","r",stdin); //freopen("output.txt","w",stdout); #endif #ifndef LocalHost freopen("fence.in","r",stdin); freopen("fence.out","w",stdout); #endif cin>>n>>m; REP(i,n)scanf("%d %d",x+i,y+i); REP(i,m){ int xx,yy; scanf("%d %d",&xx,&yy); xx--,yy--; ex[i]=xx;ey[i]=yy; v[xx].pb(pii(yy,i)); v[yy].pb(pii(xx,i)); } REP(i,n){ vector< pair > t; REP(j,v[i].size()){ int otherid = v[i][j].first; t.pb(make_pair(atan2(y[otherid]-y[i]+0.,x[otherid]-x[i]), v[i][j].second)); } SORT(t); REP(j,t.size()){ int e1 = t[j].second; int e2 = t[(j+1)%t.size()].second; int ee1 = e1 * 2; int ee2 = e2 * 2 + 1; if (ex[e1] != i) ee1 ^= 1; if (ex[e2] != i) ee2 ^= 1; w[ee1].pb(ee2); w[ee2].pb(ee1); } } vi res; REP(i,2*m)if(!u[i]){ c=0; dfs(i); res.pb(c); } SORT(res); cout<