#include #include #include #include #include #include #include #include using namespace std; using ll = long long; using pii = pair;using pll = pair;using pci = pair; using vi = vector;using vl = vector;using vs = vector;using vb = vector;using vc = vector; using vpii = vector;using vpll = vector;using vpci = vector; using vvi = vector>;using vvl = vector>;using vvb = vector; using mpii = map;using mpll = map; using mpib = map;using mpil = map; using mpci = map;using mpsi = map; using mpivi = map>;using mpivl = map>; using mplvl = map; using mpisi = map>;using mpisl = map>; #define rep(i, n) for (int i = 0; i < (int)(n); i++) #define YesNo(flag) if(flag){printf("Yes\n");}else{printf("No\n");} #define OUT(x) {cout << x << '\n';} #define OUT_(x) {cout << x << ' ';} #define all(x) (x).begin(),(x).end() inline void scan(){} template inline void scan(Head&head,Tail&... tail){std::cin>>head;scan(tail...);} #define INT(...) int __VA_ARGS__;scan(__VA_ARGS__) #define LL(...) long long __VA_ARGS__;scan(__VA_ARGS__) #define STR(...) string __VA_ARGS__;scan(__VA_ARGS__) #define CHR(...) char __VA_ARGS__;scan(__VA_ARGS__) template inline bool chmax(T& a, T b) { if (a < b) { a = b; return 1; } return 0; } template inline bool chmin(T& a, T b) { if (a > b) { a = b; return 1; } return 0; } template inline T ifloor(T x, T y){return x/y-(x%y ? (x < 0)^(y < 0) : 0);} template inline T iceil(T x, T y){return x/y+(x%y ? (x >= 0)^(y < 0) : 0);} int iinf = 1000000000; ll linf = 1000000000000000000LL; mt19937 mt; int main(){ INT(n,m); vvi G(n); rep(i,m){ INT(u,v); u--;v--; G[u].push_back(v); G[v].push_back(u); } int black = 1; vb isblack(n,false);isblack[0] = 1; queue P,Q; P.push(0); rep(i,n){ queue R; while(!P.empty()){ int p = P.front();P.pop(); R.push(p); black--; for(int q:G[p]){ if(isblack[q])continue; isblack[q] = 1; black++; Q.push(q); } } while(!R.empty())isblack[R.front()] = 0,R.pop(); swap(P,Q); OUT(black); } return 0; }