#include<bits/stdc++.h>
using namespace std;
int n,m,c1,c2,sn=1;//城镇数目n,道路数目m
int dc[1002];//记录不同城市长;
int fa[1002];
int find(int x){
if(x==fa[x])return x;
return fa[x]=find(fa[x]);
}
int join(int c1,int c2){
int j1=find(c1),j2=find(c2);
if(j1!=j2)fa[j1]=j2;
}
int search(int x){//有不同的返回1
int g=find(x); //g族长
for(int i=1;i<=sn;i++){
if(dc[i]==g)return 0;
}
dc[sn++]=g;
return 1;
}
int ct(){
int cnt=0;
for(int i=1;i<=n;i++){
cnt+=search(fa[i]);//查是否有相同的元素
}
return cnt;
}
int main(){
while(1){
cin>>n;
if(n==0)break;
cin>>m;
for(int i=1;i<=n;i++)fa[i]=i;//初始化
memset(dc,-1,sizeof(dc));
sn=1;
for(int i=1;i<=m;i++){
cin>>c1>>c2;
join(c1,c2);
}
//cout<<"t:";
//for(int i=1;i<=4;i++)cout<<fa[i]<<" ";
cout<<ct()-1;//连通块-1
}
return 0;
}
初学者,调不动,看不出问题在哪