#include #include using namespace std; int n,m,fa[100005],siz[100005],cnt[100005],dp[100005],w[100005],v[100005],len; void fenjie(int i) { int now=1; while(cnt[i]>=now) { len++; w[len]=i; v[len]=now; cnt[i]-=now; now<<=1; } if(cnt[i]) v[++len]=cnt[i]; } int find_fa(int i) { if(fa[i]==i) return i; fa[i]=find_fa(fa[i]); return fa[i]; } void __marge(int x,int y) { int fx=find_fa(x),fy=find_fa(y); if(fx!=fy) { siz[fx]+=siz[fy]; siz[fy]=0; fa[fy]=fx; } } int main() { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { fa[i]=i; siz[i]=1; } for(int i=1;i<=m;i++) { int x,y; scanf("%d%d",&x,&y); __marge(x,y); } for(int i=1;i<=n;i++) { if(fa[i]==i) cnt[siz[i]]++; } for(int i=1;i<=n;i++) { if(cnt[i]) fenjie(i); } memset(dp,0x3f,sizeof(dp)); dp[0]=0; for(int i=1;i<=len;i++) { for(int j=n;j>=v[i]*w[i];j--) { if(dp[j-v[i]*w[i]]!=0x3f3f3f3f) dp[j]=min(dp[j],dp[j-v[i]*w[i]]+v[i]); } } for(int i=1;i<=n;i++) { if(dp[i]!=0x3f3f3f3f) printf("%d\n",dp[i]-1); else printf("-1\n"); } return 0; } //924