#include <bits/stdc++.h>   using namespace std;   int n, m, A, B;   double p[25];   double a[625][625], l[625][625], u[625][625];   vector<int> g[25];   double y[625], x[625], b[625];   int id[25][25];   void edge(int ea, int b, int c, int d, double e) {     if (ea < b) swap(ea, b);     if (c < d) swap(c, d);     a[id[ea][b]][id[c][d]] += e;   }   int main() {     scanf( %d %d %d %d , &n, &m, &A, &B);     A--, B--;     if (A < B) swap(A, B);     for (int i = 0; i < (int)(m); i++) {       int ue, v;       scanf( %d %d , &ue, &v);       ue--, v--;       g[ue].push_back(v);       g[v].push_back(ue);     }     for (int i = 0; i < (int)(n); i++) scanf( %lf , &p[i]);     int N = 0;     for (int i = 0; i < (int)(n); i++)       for (int j = 0; j < (int)(i + 1); j++) id[i][j] = ++N;     for (int i = 0; i < (int)(N + 1); i++)       for (int j = 0; j < (int)(N + 1); j++) a[i][j] = 0;     for (int i = 0; i < (int)(n); i++)       for (int j = 0; j < (int)(i + 1); j++) {         if (i == j) {           edge(i, j, i, j, 1);           continue;         }         edge(i, j, i, j, p[i] * p[j]);         for (int q = 0; q < (int)(g[i].size()); q++) {           int qi = g[i][q];           edge(i, j, qi, j, (1 - p[i]) / g[i].size() * p[j]);           for (int qq = 0; qq < (int)(g[j].size()); qq++) {             int qj = g[j][qq];             edge(i, j, qi, qj,                  (1 - p[i]) / g[i].size() * (1 - p[j]) / g[j].size());           }         }         for (int qq = 0; qq < (int)(g[j].size()); qq++) {           int qj = g[j][qq];           edge(i, j, i, qj, (1 - p[j]) / g[j].size() * p[i]);         }       }     for (int i = 0; i < (int)(n); i++)       for (int j = 0; j < (int)(i); j++) a[id[i][j]][id[i][j]] -= 1;     for (int j = 1; j <= N; j++) u[1][j] = a[1][j];     for (int j = 2; j <= N; j++) l[j][1] = a[j][1] / u[1][1];     for (int i = 2; i <= N; i++) {       for (int j = i; j <= N; j++) {         u[i][j] = a[i][j];         for (int k = 1; k <= i - 1; k++) u[i][j] -= l[i][k] * u[k][j];       }       for (int j = i + 1; j <= N; j++) {         l[j][i] = a[j][i];         for (int k = 1; k <= i - 1; k++) l[j][i] -= l[j][k] * u[k][i];         l[j][i] /= u[i][i];       }     }     for (int i = 1; i <= N; i++) l[i][i] = 1.0;     for (int d = 0; d < (int)(n); d++) {       for (int i = 0; i < (int)(n); i++)         for (int j = 0; j < (int)(i + 1); j++)           if (i != j) {             b[id[i][j]] = 0;           } else             b[id[i][j]] = i == d;       for (int i = 1; i <= N; i++) {         y[i] = b[i];         for (int j = 1; j < i; j++) y[i] -= l[i][j] * y[j];       }       for (int i = N; i >= 1; i--) {         x[i] = y[i];         for (int j = i + 1; j <= N; j++) x[i] -= u[i][j] * x[j];         x[i] /= u[i][i];       }       if (d) printf(   );       printf( %.8f , x[id[A][B]]);     }     printf(  n );     return 0;   }   