#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<fstream>
#include<map>
#include<ctime>
#include<set>
#include<queue>
#include<cmath>
#include<vector>
#include<bitset>
#include<functional>
#define x first
#define y second
#define mp make_pair
#define pb push_back
#define REP(i,l,r) for((i)=(l);(i)<=(r);++(i))
#define REP2(i,l,r) for((i)=(l);(i)!=(r);++(i))
using namespace std;
typedef long long LL;
typedef double ld;
const int MAX=20000+10;
const int INF=10000000;
int n,m,a[MAX],b[MAX];
struct Edge
{
int s,t;
int next;
int res;
}e[MAX*10];
int nume,begin[MAX];
int S,T;
void addedge(int a,int b,int c)
{
e[++nume].t=b;
e[nume].s=a;
e[nume].next=begin[a];
begin[a]=nume;
e[nume].res=c;
}
void add(int a,int b,int c)
{
addedge(a,b,c);
addedge(b,a,0);
}
int gap[MAX],h[MAX];
int tt=0;
int sap(int u,int flow)
{
if(u==T)
return flow;
++tt;
if(tt>1000000)
h[S]=T+1;
int remain=flow,i,v;
for(i=begin[u];i;i=e[i].next)
if(h[v=e[i].t]+1==h[u] && e[i].res>0)
{
int tmp=sap(v,min(e[i].res,remain));
e[i].res-=tmp;
e[i^1].res+=tmp;
remain-=tmp;
if(!remain)
return flow;
}
--gap[ h[u] ];
if(!gap[h[u]])
h[S]=T;
++gap[++h[u]];
return flow-remain;
}
int check(int mid)
{
int i;
S=n+m+1;
T=n+m+2;
nume=1;
memset(begin,0,sizeof begin);
memset(gap,0,sizeof gap);
memset(h,0,sizeof h);
gap[0]=T;
REP(i,1,m)
{
add(S,i,1);
add(i,a[i]+m,1);
add(i,b[i]+m,1);
}
REP(i,1,n)
add(i+m,T,mid);
int ans=0;
tt=0;
while(h[S]<T)
ans+=sap(S,INF);
return (ans==m);
}
int main()
{
// freopen("input.txt","r",stdin);freopen("output.txt","w",stdout);
int i;
scanf("%d%d",&n,&m);
REP(i,1,m)
scanf("%d%d",&a[i],&b[i]);
if(!m)
{
printf("0\n");
return 0;
}
int Left=0,Right=m;
while(Left<Right)
{
int mid=(Left+Right)/2;
if(!check(mid))
Left=mid+1;
else Right=mid;
}
check(Left);
printf("%d\n",Left);
REP(i,2,nume)
if(e[i].t>m && e[i].t<=n+m && e[i].s<=m && i%2==0 && e[i].res==0)
printf("%d\n",e[i].t-m==a[ e[i].s ]);
return 0;
}
I2luY2x1ZGU8Y3N0ZGlvPgojaW5jbHVkZTxjc3RkbGliPgojaW5jbHVkZTxjc3RyaW5nPgojaW5jbHVkZTxhbGdvcml0aG0+CiNpbmNsdWRlPGlvc3RyZWFtPgojaW5jbHVkZTxmc3RyZWFtPgojaW5jbHVkZTxtYXA+CiNpbmNsdWRlPGN0aW1lPgojaW5jbHVkZTxzZXQ+CiNpbmNsdWRlPHF1ZXVlPgojaW5jbHVkZTxjbWF0aD4KI2luY2x1ZGU8dmVjdG9yPgojaW5jbHVkZTxiaXRzZXQ+CiNpbmNsdWRlPGZ1bmN0aW9uYWw+CiNkZWZpbmUgeCBmaXJzdAojZGVmaW5lIHkgc2Vjb25kCiNkZWZpbmUgbXAgbWFrZV9wYWlyCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgUkVQKGksbCxyKSBmb3IoKGkpPShsKTsoaSk8PShyKTsrKyhpKSkKI2RlZmluZSBSRVAyKGksbCxyKSBmb3IoKGkpPShsKTsoaSkhPShyKTsrKyhpKSkKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnR5cGVkZWYgbG9uZyBsb25nIExMOwp0eXBlZGVmIGRvdWJsZSBsZDsKCmNvbnN0IGludCBNQVg9MjAwMDArMTA7CmNvbnN0IGludCBJTkY9MTAwMDAwMDA7CgppbnQgbixtLGFbTUFYXSxiW01BWF07CgpzdHJ1Y3QgRWRnZQp7CglpbnQgcyx0OwoJaW50IG5leHQ7CglpbnQgcmVzOwp9ZVtNQVgqMTBdOwppbnQgbnVtZSxiZWdpbltNQVhdOwppbnQgUyxUOwoKdm9pZCBhZGRlZGdlKGludCBhLGludCBiLGludCBjKQp7CgllWysrbnVtZV0udD1iOwoJZVtudW1lXS5zPWE7CgllW251bWVdLm5leHQ9YmVnaW5bYV07CgliZWdpblthXT1udW1lOwoJZVtudW1lXS5yZXM9YzsKfQoKdm9pZCBhZGQoaW50IGEsaW50IGIsaW50IGMpCnsKCWFkZGVkZ2UoYSxiLGMpOwoJYWRkZWRnZShiLGEsMCk7Cn0KCmludCBnYXBbTUFYXSxoW01BWF07CmludCB0dD0wOwoKaW50IHNhcChpbnQgdSxpbnQgZmxvdykKewoJaWYodT09VCkKCQlyZXR1cm4gZmxvdzsKCSsrdHQ7CglpZih0dD4xMDAwMDAwKQoJCWhbU109VCsxOwoJaW50IHJlbWFpbj1mbG93LGksdjsKCWZvcihpPWJlZ2luW3VdO2k7aT1lW2ldLm5leHQpCgkJaWYoaFt2PWVbaV0udF0rMT09aFt1XSAmJiBlW2ldLnJlcz4wKQoJCXsKCQkJaW50IHRtcD1zYXAodixtaW4oZVtpXS5yZXMscmVtYWluKSk7CgkJCWVbaV0ucmVzLT10bXA7CgkJCWVbaV4xXS5yZXMrPXRtcDsKCQkJcmVtYWluLT10bXA7CgkJCWlmKCFyZW1haW4pCgkJCQlyZXR1cm4gZmxvdzsKCQl9CgktLWdhcFsgaFt1XSBdOwoJaWYoIWdhcFtoW3VdXSkKCQloW1NdPVQ7CgkrK2dhcFsrK2hbdV1dOwoJcmV0dXJuIGZsb3ctcmVtYWluOwp9CgppbnQgY2hlY2soaW50IG1pZCkKewoJaW50IGk7CglTPW4rbSsxOwoJVD1uK20rMjsKCW51bWU9MTsKCW1lbXNldChiZWdpbiwwLHNpemVvZiBiZWdpbik7CgltZW1zZXQoZ2FwLDAsc2l6ZW9mIGdhcCk7CgltZW1zZXQoaCwwLHNpemVvZiBoKTsKCWdhcFswXT1UOwoJUkVQKGksMSxtKQoJewoJCWFkZChTLGksMSk7CgkJYWRkKGksYVtpXSttLDEpOwoJCWFkZChpLGJbaV0rbSwxKTsKCX0KCVJFUChpLDEsbikKCQlhZGQoaSttLFQsbWlkKTsKCWludCBhbnM9MDsKCXR0PTA7Cgl3aGlsZShoW1NdPFQpCgkJYW5zKz1zYXAoUyxJTkYpOwoJcmV0dXJuIChhbnM9PW0pOwp9CgppbnQgbWFpbigpCnsKLy8JZnJlb3BlbigiaW5wdXQudHh0IiwiciIsc3RkaW4pO2ZyZW9wZW4oIm91dHB1dC50eHQiLCJ3IixzdGRvdXQpOwoJaW50IGk7CglzY2FuZigiJWQlZCIsJm4sJm0pOwoJUkVQKGksMSxtKQoJCXNjYW5mKCIlZCVkIiwmYVtpXSwmYltpXSk7CglpZighbSkKCXsKCQlwcmludGYoIjBcbiIpOwoJCXJldHVybiAwOwoJfQoJaW50IExlZnQ9MCxSaWdodD1tOwoJd2hpbGUoTGVmdDxSaWdodCkKCXsKCQlpbnQgbWlkPShMZWZ0K1JpZ2h0KS8yOwoJCWlmKCFjaGVjayhtaWQpKQoJCQlMZWZ0PW1pZCsxOwoJCWVsc2UgUmlnaHQ9bWlkOwoJfQoJY2hlY2soTGVmdCk7CglwcmludGYoIiVkXG4iLExlZnQpOwoJUkVQKGksMixudW1lKQoJCWlmKGVbaV0udD5tICYmIGVbaV0udDw9bittICYmIGVbaV0uczw9bSAmJiBpJTI9PTAgJiYgZVtpXS5yZXM9PTApCgkJCXByaW50ZigiJWRcbiIsZVtpXS50LW09PWFbIGVbaV0ucyBdKTsKCXJldHVybiAwOwp9Cg==