#define _CRT_SECURE_NO_WARNINGS #define _SILENCE_CXX17_C_HEADER_DEPRECATION_WARNING #include using namespace std; const int N = 2e5 + 50; const int M = N << 1; int adj[N], nxt[M], to[M], col[N], ecnt; bool vis[N]; inline void addEdge(int f, int t) { nxt[ecnt] = adj[f]; adj[f] = ecnt; to[ecnt] = t; ecnt++; } int main() { memset(adj, -1, sizeof(adj)); ios::sync_with_stdio(false); int n, m; cin >> n >> m; for (int i = 0, u, v; i < m; i++) { cin >> u >> v; addEdge(u, v); addEdge(v, u); } queue> Q; for (Q.push(make_pair(1, 0)), vis[1] = true; !Q.empty(); Q.pop()) { auto [x, c] = Q.front(); for (int e = adj[x]; ~e; e = nxt[e]) if (!vis[to[e]]) { col[to[e]] = c ^ 1; vis[to[e]] = true; Q.push(make_pair(to[e], c ^ 1)); } } bool flag = true; for (int i = 1; i <= n; i++) for (int e = adj[i]; ~e; e = nxt[e]) if (col[to[e]] == col[i]) flag = false; if (flag) { puts("YES"); for (int i = 0; i < m; i++) putchar('0' + col[to[i << 1]]); putchar('\n'); } else puts("NO"); return 0; }