2 1
1 1
2 1
 8 12
-6 2 -3 2 6 -7 1 -5
2 1
5 6
1 6
1 4
8 2
2 7
2 5
8 3
8 4
3 7
7 6
3 1
 10 13
3 4 -3 8 6 4 -5 1 3 -7
9 5
9 2
10 3
1 4
3 5
9 1
6 10
10 4
3 1
2 7
1 6
1 7
7 8
 43 52
-23 -18 -35 21 -12 38 -35 -11 28 -20 27 -5 9 -19 -39 -25 -32 32 -36 28 11 37 1 -25 -22 9 -15 21 25 -39 10 36 -30 -40 22 26 25 -27 -22 -38 -1 18 -13
33 40
31 23
30 26
21 17
6 2
41 19
32 39
32 23
13 14
25 35
31 30
19 32
25 22
34 36
7 40
23 6
40 12
1 3
23 43
36 13
18 33
17 32
7 3
21 34
41 35
20 7
23 1
41 8
25 19
20 29
42 5
40 21
9 37
17 41
30 10
41 18
39 1
20 24
20 4
42 3
20 25
5 16
31 9
42 28
10 11
19 42
31 38
25 2
31 27
17 25
13 15
31 20
 2 1
1 1
1 2
 5 7
4 1 5 3 -1
2 4
5 4
5 2
1 5
1 2
4 1
1 3
 10 12
5 1 1 8 -8 10 -3 -2 1 7
5 3
8 2
10 9
4 6
5 6
4 5
5 10
4 7
8 4
3 1
3 6
6 10
 20 40
-9 -10 -9 15 -3 -5 -17 -10 -6 2 -13 19 10 -15 15 -14 17 0 7 -8
3 17
6 18
15 12
2 5
18 3
16 20
6 17
20 10
10 18
9 12
15 3
6 4
15 16
20 6
20 9
9 4
4 8
14 5
11 7
12 11
3 13
14 19
7 17
16 14
19 7
12 13
14 13
13 11
9 14
13 17
8 19
5 20
2 17
2 16
12 5
8 1
20 3
6 2
5 18
13 8

YES
                                                               1
 NO
 YES
                                                              -7
                                                              10
                                                             -16
                                                               3
                                                              13
                                                               0
                                                               4
                                                               5
                                                               0
                                                              -6
                                                               0
                                                               0
                                                               1
 NO
 YES
                                                               1
 YES
                                                               2
                                                               1
                                                              -1
                                                              -1
                                                               0
                                                               0
                                                               5
 YES
-4
1
1
17
-7
-3
6
-3
-3
5
0
0
 YES
                                                             -30
                                                             -21
                                                             -23
                                                             -10
                                                              21
                                                             -52
                                                               0
                                                               2
                                                               0
                                                              -9
                                                               0
                                                              16
                                                              38
                                                               0
                                                              42
                                                               0
                                                              -1
                                                               7
                                                             -64
                                                              51
                                                               0
                                                               7
                                                              47
                                                               0
                                                               0
                                                               0
                                                              10
                                                               0
                                                             -39
                                                               0
                                                               0
                                                               0
                                                               0
                                                               0
                                                               0
                                                              -9
                                                               0
                                                               0
                                                               0
                                                               0

#include <bits/stdc++.h>
using namespace std;
int n, m, x, y, fx, fy, sl, fh, a[100010], up[100010], fa[100010], dep[100010],
    f[100010][25];
int t, head[100010], to[200010], num[200010], nxt[200010];
int b[100010], c[100010], s[100010];
long long val[100010];
char ch;
int rd() {
  sl = 0;
  fh = 1;
  ch = getchar();
  while (ch < '0' || '9' < ch) {
    if (ch == '-') fh = -1;
    ch = getchar();
  }
  while ('0' <= ch && ch <= '9') sl = sl * 10 + ch - '0', ch = getchar();
  return sl * fh;
}
void add(int u, int v, int w) {
  t++;
  to[t] = v;
  num[t] = w;
  nxt[t] = head[u];
  head[u] = t;
}
int find(int k) {
  if (k != fa[k]) fa[k] = find(fa[k]);
  return fa[k];
}
long long dfs(int u) {
  for (int i = 1; i <= 20; ++i) f[u][i] = f[f[u][i - 1]][i - 1];
  int v;
  long long sv, sum = 0;
  for (int i = head[u]; i; i = nxt[i])
    if ((v = to[i]) != f[u][0]) {
      f[v][0] = u;
      dep[v] = dep[u] + 1;
      up[v] = num[i];
      sv = dfs(v);
      sum += (val[num[i]] = a[v] - sv);
    }
  return sum;
}
int lca(int u, int v) {
  if (dep[u] < dep[v]) swap(u, v);
  for (int i = 20; i >= 0; --i)
    if (dep[f[u][i]] >= dep[v]) u = f[u][i];
  if (u == v) return u;
  for (int i = 20; i >= 0; --i)
    if (f[u][i] != f[v][i]) u = f[u][i], v = f[v][i];
  return f[u][0];
}
int main() {
  n = rd();
  m = rd();
  int k = 0;
  for (int i = 1; i <= n; ++i) a[i] = rd(), fa[i] = i;
  for (int i = 1; i <= m; ++i) {
    x = rd();
    y = rd();
    fx = find(x);
    fy = find(y);
    if (fx != fy)
      fa[fx] = fy, add(x, y, i), add(y, x, i);
    else
      k++, b[k] = x, c[k] = y, s[k] = i;
  }
  dep[1] = 1;
  long long sum = dfs(1);
  if ((a[1] - sum) & 1) {
    puts("NO");
    return 0;
  } else if (a[1] == sum) {
    puts("YES");
    for (int i = 1; i <= m; ++i) printf("%I64d\n", val[i]);
    return 0;
  } else if (!k) {
    puts("NO");
    return 0;
  }
  int u, v;
  sum = a[1] - sum;
  long long w;
  for (int i = 1; i <= k; ++i) {
    x = b[i], y = c[i];
    if ((dep[x] & 1) ^ (dep[y] & 1)) continue;
    u = lca(x, y);
    if (dep[x] & 1)
      w = -(sum >> 1);
    else
      w = (sum >> 1);
    while (x != u) val[up[x]] += w, w *= -1, x = f[x][0];
    if (dep[y] & 1)
      w = -(sum >> 1);
    else
      w = (sum >> 1);
    while (y != u) val[up[y]] += w, w *= -1, y = f[y][0];
    if (dep[u] & 1)
      w = -sum;
    else
      w = sum;
    while (u != 1) val[up[u]] += w, w *= -1, u = f[u][0];
    val[s[i]] = sum >> 1;
    puts("YES");
    for (int j = 1; j <= m; ++j) printf("%I64d\n", val[j]);
    return 0;
  }
  puts("NO");
  return 0;
}
