func_code_string: #include <bits/stdc++.h>   using namespace std;   inline void read(int &x) {     int v = 0, f = 1;     char c = getchar();     while (!isdigit(c) && c !=  - ) c = getchar();     if (c ==  - )       f = -1;     else       v = (c & 15);     while (isdigit(c = getchar())) v = (v << 1) + (v << 3) + (c & 15);     x = v * f;   }   inline void read(long long &x) {     long long v = 0ll, f = 1ll;     char c = getchar();     while (!isdigit(c) && c !=  - ) c = getchar();     if (c ==  - )       f = -1;     else       v = (c & 15);     while (isdigit(c = getchar())) v = (v << 1) + (v << 3) + (c & 15);     x = v * f;   }   inline void readc(char &x) {     char c;     while (((c = getchar()) ==    ) || c ==   n )       ;     x = c;   }   int n, m, i, j, vis[100005], ve[100005], dep[100005];   long long a[100005], px[100005], py[100005], res[100005];   vector<int> e[100005];   void dfs1(int x) {     vis[x] = 1;     for (__typeof((e[x]).begin()) it = (e[x]).begin(); it != (e[x]).end(); it++) {       if (!ve[*it]) {         int y = px[*it] ^ py[*it] ^ x;         if (!vis[y]) {           ve[*it] = 1;           dep[y] = dep[x] + 1;           dfs1(y);           res[*it] += a[y];           a[x] -= a[y];           a[y] = 0;         }       }     }   }   int main() {     read(n);     read(m);     for (((i)) = (1); ((i)) <= ((n)); ((i))++) read(a[i]);     for (((i)) = (1); ((i)) <= ((m)); ((i))++) {       int x, y;       read(x);       read(y);       px[i] = x;       py[i] = y;       e[x].push_back(i);       e[y].push_back(i);     }     dfs1(1);     for (((i)) = (1); ((i)) <= ((m)); ((i))++)       if (!ve[i]) {         if (!((dep[px[i]] ^ dep[py[i]]) & 1)) {           if (dep[px[i]] & 1)             res[i] -= a[1] / 2;           else             res[i] = +a[1] / 2;           a[px[i]] -= res[i];           a[py[i]] -= res[i];           break;         }       }     memset(vis, 0, sizeof(vis));     memset(ve, 0, sizeof(ve));     dfs1(1);     if (a[1]) {       puts( NO );       return 0;     }     puts( YES );     for (((i)) = (1); ((i)) <= ((m)); ((i))++) {       printf( %lld n , res[i]);     }     return 0;   }   