func_code_string: #include <bits/stdc++.h>   using namespace std;   struct edge {     int v, id;     edge *next;   } * h[233333], pool[555555];   int top;   inline void addedge(int u, int v, int id) {     edge *tmp = &pool[top++];     tmp->v = v;     tmp->id = id;     tmp->next = h[u];     h[u] = tmp;     edge *pmt = &pool[top++];     pmt->v = u;     pmt->id = -id;     pmt->next = h[v];     h[v] = pmt;   }   int n, m;   int s[233333], f[233333], vis[233333], pa[233333];   void dfs(int u) {     vis[u] = 1;     for (edge *tmp = h[u]; tmp; tmp = tmp->next) {       if (tmp->v != pa[u] && !vis[tmp->v]) {         pa[tmp->v] = u;         dfs(tmp->v);         if (s[tmp->v]) {           if (tmp->id > 0)             f[tmp->id] += s[tmp->v];           else             f[-tmp->id] -= s[tmp->v];           s[u] += s[tmp->v];         }       }     }   }   int main() {     scanf( %d , &n);     for (int i = 1; i <= n; i++) scanf( %d , &s[i]);     scanf( %d , &m);     int u, v;     for (int i = 1; i <= m; i++) {       scanf( %d%d , &u, &v);       addedge(u, v, i);     }     for (int i = 1; i <= n; i++) {       if (!vis[i]) {         dfs(i);         if (s[i] != 0) {           printf( Impossible n );           return 0;         }       }     }     printf( Possible n );     for (int i = 1; i <= m; i++) printf( %d n , f[i]);     return 0;   }   