#include <bits/stdc++.h>
using namespace std;
const int N = 5010;
int e[N][2], vis[N][2], d[N], n, m;
void dfs(int u, int v) {
  if (vis[u][v]) return;
  vis[u][v] = 1;
  for (int i = 0; i < m; i++)
    if (e[i][v] == u) dfs(e[i][v ^ 1], v);
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 0; i < m; i++) scanf("%d%d", e[i], e[i] + 1);
  dfs(1, 0);
  dfs(n, 1);
  for (int j = 0; j < n + 10; j++)
    for (int i = 0; i < m; i++)
      if (vis[e[i][0]][0] && vis[e[i][1]][1])
        d[e[i][1]] = min(d[e[i][1]], d[e[i][0]] + 2),
        d[e[i][0]] = min(d[e[i][0]], d[e[i][1]] - 1);
  for (int i = 0; i < m; i++)
    if (vis[e[i][0]][0] && vis[e[i][1]][1]) {
      if (d[e[i][1]] - d[e[i][0]] != 2 && d[e[i][1]] - d[e[i][0]] != 1)
        return puts("No"), 0;
    }
  puts("Yes");
  for (int i = 0; i < m; i++)
    printf("%d\n", min(max(d[e[i][1]] - d[e[i][0]], 1), 2));
}
