#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ul unsigned long long
#define nn "\n"
ll mod = 1e9+7;
const int N = 1e5 + 5;
int MOD = 998244353;
int bit[200000];
int n, m;
vector<int> adj[N];
int color[N];
void nhap(){
cin >> n >> m ;
int x,y;
for(int i= 0 ; i < m ; i++){
cin >> x >> y;
adj[x].push_back(y);
adj[y].push_back(x);
}
}
// void nhap(){
// cin >> n >> m;
// for(int i= 1 ; i <= n ; i++){
// for(int j= 1; j <= m ; j++){
// cin >> a[i][j];
// }
// }
// }
// void bfs(int sx, int sy) {
// dem++;
// queue < pair <int, int> > q;
// q.push({sx, sy});
// visited[sx][sy] = true;
// while (!q.empty()) {
// int x = q.front().first;
// int y = q.front().second;
// q.pop();
// for (int i = 0; i < 4; ++i) {
// int u = x + sX[i];
// int v = y + sY[i];
// if (u > n || u < 1) continue;
// if (v > m || v < 1) continue;
// if (a[u][v] != '#' && !visited[u][v]) {
// visited[u][v] = true;
// q.push({u, v});
// }
// }
// }
// }
bool bfs(int s) {
queue <int> q;
q.push(s);
color[s] = 0;
while (!q.empty()) {
int u = q.front();
q.pop();
for (int v : adj[u]) {
if(color[v] == color[u]){
return false;
}
else if(color[v] == -1){
color[v] = !color[u];
q.push(v);
}
}
}
return true;
}
int main() {
//freopen("BFS.INP", "r", stdin);
//freopen("BFS.OUT", "w", stdout);
ios_base::sync_with_stdio(0);
memset(color, -1, sizeof(color));
bool ok = false;
nhap();
for(int i = 1; i <= n ; i++){
if(color[i] == -1){
if( bfs(i) ){
ok = true;
}
else{
cout << "IMPOSSIBLE" << nn;
ok = false;
return 0;
}
}
}
if(ok){
for(int i = 1 ; i <= n; i++){
cout << color[i] + 1 << " ";
}
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIHVsIHVuc2lnbmVkIGxvbmcgbG9uZwojZGVmaW5lIG5uICJcbiIKCmxsIG1vZCA9IDFlOSs3Owpjb25zdCBpbnQgTiA9IDFlNSArIDU7CmludCBNT0QgPSA5OTgyNDQzNTM7CmludCBiaXRbMjAwMDAwXTsKaW50IG4sIG07CnZlY3RvcjxpbnQ+IGFkaltOXTsKaW50IGNvbG9yW05dOwoKdm9pZCBuaGFwKCl7CgljaW4gPj4gbiA+PiBtIDsKCWludCB4LHk7Cglmb3IoaW50IGk9IDAgOyBpIDwgbSA7ICBpKyspewoJCWNpbiA+PiB4ID4+IHk7CgkJYWRqW3hdLnB1c2hfYmFjayh5KTsKCQlhZGpbeV0ucHVzaF9iYWNrKHgpOwoJfQp9Ci8vIHZvaWQgbmhhcCgpewovLyAJY2luID4+IG4gPj4gbTsKLy8gCWZvcihpbnQgaT0gMSA7IGkgPD0gbiA7ICBpKyspewovLyAJCWZvcihpbnQgaj0gMTsgaiA8PSBtIDsgaisrKXsKLy8gCQkJY2luID4+IGFbaV1bal07CiAgICAgICAgICAgIAovLyAJCX0KLy8gCX0KLy8gfQovLyB2b2lkIGJmcyhpbnQgc3gsIGludCBzeSkgeyAKLy8gICAgIGRlbSsrOwovLyAgICAgcXVldWUgPCBwYWlyIDxpbnQsIGludD4gPiBxOwovLyAgICAgcS5wdXNoKHtzeCwgc3l9KTsKLy8gICAgIHZpc2l0ZWRbc3hdW3N5XSA9IHRydWU7Ci8vICAgICB3aGlsZSAoIXEuZW1wdHkoKSkgewovLyAgICAgICAgIGludCB4ID0gcS5mcm9udCgpLmZpcnN0OwovLyAgICAgICAgIGludCB5ID0gcS5mcm9udCgpLnNlY29uZDsKLy8gICAgICAgICBxLnBvcCgpOwogICAgICAgIAoKLy8gICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7ICsraSkgewovLyAgICAgICAgICAgICBpbnQgdSA9IHggKyBzWFtpXTsKLy8gICAgICAgICAgICAgaW50IHYgPSB5ICsgc1lbaV07CgovLyAgICAgICAgICAgICBpZiAodSA+IG4gfHwgdSA8IDEpIGNvbnRpbnVlOwovLyAgICAgICAgICAgICBpZiAodiA+IG0gfHwgdiA8IDEpIGNvbnRpbnVlOwogICAgICAgICAgIAoKLy8gICAgICAgICAgICAgaWYgKGFbdV1bdl0gIT0gJyMnICYmICF2aXNpdGVkW3VdW3ZdKSB7Ci8vICAgICAgICAgICAgICAgICB2aXNpdGVkW3VdW3ZdID0gdHJ1ZTsKLy8gICAgICAgICAgICAgICAgIHEucHVzaCh7dSwgdn0pOwovLyAgICAgICAgICAgICB9Ci8vICAgICAgICAgfQoKLy8gICAgIH0KLy8gfQpib29sIGJmcyhpbnQgcykgeyAKICAgIHF1ZXVlIDxpbnQ+IHE7CiAgICBxLnB1c2gocyk7CiAgICBjb2xvcltzXSA9IDA7CiAgICB3aGlsZSAoIXEuZW1wdHkoKSkgewogICAgICAgIGludCB1ID0gcS5mcm9udCgpOwogICAgICAgIHEucG9wKCk7CiAgICAgICAgZm9yIChpbnQgdiA6IGFkalt1XSkgewogICAgICAgICAgICBpZihjb2xvclt2XSA9PSBjb2xvclt1XSl7CiAgICAgICAgICAgIAlyZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZihjb2xvclt2XSA9PSAtMSl7CiAgICAgICAgICAgIAljb2xvclt2XSA9ICFjb2xvclt1XTsKICAgICAgICAgICAgCXEucHVzaCh2KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybiB0cnVlOwp9CmludCBtYWluKCkgewoJLy9mcmVvcGVuKCJCRlMuSU5QIiwgInIiLCBzdGRpbik7CgkvL2ZyZW9wZW4oIkJGUy5PVVQiLCAidyIsIHN0ZG91dCk7Cglpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOwoJbWVtc2V0KGNvbG9yLCAtMSwgc2l6ZW9mKGNvbG9yKSk7Cglib29sIG9rID0gZmFsc2U7CgluaGFwKCk7Cglmb3IoaW50IGkgPSAxOyBpIDw9IG4gOyBpKyspewoJCWlmKGNvbG9yW2ldID09IC0xKXsKCQkJaWYoIGJmcyhpKSApewogICAgCSAgICAgICAgb2sgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2V7CiAgICAgICAgICAgIAljb3V0IDw8ICJJTVBPU1NJQkxFIiA8PCBubjsKICAgICAgICAgICAgCW9rID0gZmFsc2U7CiAgICAgICAgICAgIAlyZXR1cm4gMDsKICAgICAgICAgICAgfSAKCQl9Cgl9CglpZihvayl7CgkJZm9yKGludCBpID0gMSA7IGkgPD0gbjsgaSsrKXsKCQkJY291dCA8PCBjb2xvcltpXSArIDEgPDwgIiAiOwoJCX0KCX0KICAgIAp9