func_code_string: #include <bits/stdc++.h>   using namespace std;   inline int getint() {     int res = 0, fh = 1;     char ch = getchar();     while ((ch <  0  || ch >  9 ) && ch !=  - ) ch = getchar();     if (ch ==  - ) fh = -1, ch = getchar();     while (ch <=  9  && ch >=  0 ) res = res * 10 + ch -  0 , ch = getchar();     return res * fh;   }   int n, m, A, B, out[23], mp[23][23];   double p[23], G[23][23], a[485][485], b[485], ans[485];   void gauss() {     for (int i = 1; i <= n * n; i++) {       int id = i;       for (int j = i + 1; j <= n * n; j++)         if (fabs(a[j][i]) > fabs(a[id][i])) id = j;       for (int j = i; j <= n * n; j++) swap(a[i][j], a[id][j]);       swap(b[i], b[id]);       if (a[i][i]) {         for (int j = i + 1; j <= n * n; j++) {           double p = a[j][i] / a[i][i];           for (int k = i; k <= n * n; k++) a[j][k] -= a[i][k] * p;           b[j] -= b[i] * p;         }       }     }     for (int i = n * n; i >= 1; i--) {       if (a[i][i])         ans[i] = b[i] / a[i][i];       else         ans[i] = 0;       for (int j = i - 1; j >= 1; j--) b[j] -= a[j][i] * ans[i];     }   }   int main() {     n = getint();     m = getint();     A = getint();     B = getint();     for (int i = 1; i <= m; i++) {       int x = getint(), y = getint();       mp[x][y] = mp[y][x] = 1;       out[x]++;       out[y]++;     }     for (int i = 1; i <= n; i++) scanf( %lf , &p[i]), G[i][i] = p[i];     for (int i = 1; i <= n; i++)       for (int j = 1; j <= n; j++)         if (mp[i][j]) G[i][j] = (1 - p[i]) / (double)out[i];     for (int i = 1; i <= n; i++)       for (int j = 1; j <= n; j++) {         a[((i - 1) * n + j)][((i - 1) * n + j)] = -1;         for (int k = 1; k <= n; k++)           for (int l = 1; l <= n; l++)             if (k != l)               a[((i - 1) * n + j)][((k - 1) * n + l)] += G[k][i] * G[l][j];       }     b[((A - 1) * n + B)] = -1;     gauss();     for (int i = 1; i <= n; i++) printf( %.10lf  , ans[((i - 1) * n + i)]);     return 0;   }   