#include<iostream>#include<istream>#include<sstream>#include<vector>#include<stack>#include<list>#include<map>#include<set>#include<deque>#include<queue>#include<cstring>#include<unordered_map>#include<unordered_set>#include<algorithm>#include<numeric>#include<chrono>#include<ctime>#include<cmath>#include<cctype>#include<string>#include<cstdio>#include<iomanip>#include<thread>#include<mutex>#include<condition_variable>#include<functional>#include<iterator>usingnamespace std;constint maxn =1e4+7;int n, m,k,color[maxn];
vector<int> e[maxn];boolCheck(int cur,int c){
for(int i =0; i < e[cur].size(); i++){
if(color[e[cur][i]]== c)returnfalse;}returntrue;}voiddfs(int cur){
for(int i =1; i <= k; i++){
if(Check(cur, i)){
color[cur]= i;break;}}for(int i =0; i < e[cur].size(); i++){
if(!color[e[cur][i]]){
dfs(e[cur][i]);}}}intmain(){
int a, b;while(cin >> n >> m && n && m){
for(int i =1; i <= n; i++) e[i].clear();
k =0;for(int i =1; i <= m; i++){
cin >> a >> b;
e[a].push_back(b);
e[b].push_back(a);
k =max(k,(int)e[a].size());
k =max(k,(int)e[b].size());}
k |=1;memset(color,0,sizeof(color));
cout << k << endl;dfs(1);for(int i =1; i <= n; i++)cout << color[i]<< endl;}return0;}
#include<iostream>#include<istream>#include<sstream>#include<vector>#include<stack>#include<list>#include<map>#include<set>#include<deque>#include<queue>#include<cstring>#include<unordered_map>#include<unordered_set>#include<algorithm>#include<numeric>#include<chrono>#include<ctime>#include<cmath>#include<cctype>#include<string>#include<cstdio>#include<iomanip>#include<thread>#include<mutex>#include<condition_variable>#include<functional>#include<iterator>usingnamespace std;constint maxn =1e4+7;int n, m,k,vis[maxn],color[maxn];
vector<int> e[maxn];voiddfs(int cur){
for(int i =0; i < e[cur].size(); i++){
vis[color[e[cur][i]]]= cur;}for(int i =1; i <= k; i++){
if(vis[i]!= cur){
color[cur]= i;break;}}for(int i =0; i < e[cur].size(); i++){
if(!color[e[cur][i]]){
dfs(e[cur][i]);}}}intmain(){
int a, b;while(cin >> n >> m && n && m){
for(int i =1; i <= n; i++)e[i].clear();
k =0;for(int i =1; i <= m; i++){
cin >> a >> b;
e[a].push_back(b);
e[b].push_back(a);}for(int i =1; i <= n; i++) k =max(k,(int)e[i].size());
k |=1;memset(vis,0,sizeof(vis));memset(color,0,sizeof(color));dfs(1);
cout << k << endl;for(int i =1; i <= n; i++) cout << color[i]<< endl;}return0;}