#include #include #include using namespace std; typedef long long ll; const ll N=500005; ll n,m; ll hea[N],nex[N],rot[N],nod[N],idx,num[N],dp[N],dp2[N]; ll me[N]; void con(ll a,ll b){ nex[idx]=hea[a]; hea[a]=idx; nod[idx]=b; } ll root(ll poi){ for(;rot[poi]!=rot[rot[poi]];){ rot[poi]=rot[rot[poi]]; } return rot[poi]; } void prodp(ll w,ll c){ if(dp[w]>-1){ prodp(w*2,c+dp[w]); dp[w]=min(dp[w],c); } else{ dp[w]=c; } } int main(){ memset(dp,-1,sizeof(dp)); memset(hea,-1,sizeof(hea)); memset(nex,-1,sizeof(nex)); cin>>n>>m; for(ll i=1;i<=n;i++){ rot[i]=i; num[i]=1; } for(ll i=1;i<=m;i++){ ll a,b; cin>>a>>b; if(a==b){ continue; } con(a,b); con(b,a); if(root(a)=1;j-=1){ for(ll k=1;k<=me[i];k++){ if((j-i*k)<=0)break; if(dp[j-i*k]==-1)continue; if(dp[j]<=0)dp[j]=N*N; dp[j]=min(dp[j],dp[j-i*k]+k); } } for(ll j=1;j<=me[i];j++){ dp[j*i]=j-1; } } // for(ll i=1;i<=n;i++){ // for(ll j=1;j<=me[i];j++){ // prodp(j*i,j-1); // } // } for(ll i=1;i<=n;i++){ cout<