Link to this code: https://cses.fi/paste/98316f44f5f4b66ec3d1ad/
# include <bits/stdc++.h>
using namespace std;
// # define int long long

vector<vector<int>> graph;
vector<int> color;
vector<bool> vis;
bool notValid = 0;

void dfs(int node, int clr) {
    notValid |= vis[node] && color[node] != (clr + 1);
    if (vis[node]) return;
    color[node] = clr + 1;
    vis[node] = 1;
    for (auto neig : graph[node]) {
        dfs(neig, clr ^ 1);
    }
}

void solve() {
    int n, k, u, v; cin >> n >> k;
    graph.assign(n + 1, vector<int>());
    color.assign(n + 1, 0);
    vis.assign(n + 1, 0);
    while (k--) {
        cin >> u >> v;
        graph[u].push_back(v);
        graph[v].push_back(u);
    }

    for (int node = 1 ; node <= n; node++) if (!vis[node]) dfs(node, 0);
    if (notValid)  cout << "IMPOSSIBLE";
    else for (int node = 1 ; node <= n; node++) cout << color[node] << " ";
    cout << '\n';
}

signed main() {
    solve();
    return 0;
}