#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int s = 0, f = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9')
    s = (s << 1) + (s << 3) + ch - '0', ch = getchar();
  return s * f;
}
double s[500][500], p[25];
inline double myabs(double x) { return x > 0.0 ? x : -x; }
inline void gs(int n) {
  int i, j, k, r;
  for (i = 1; i <= n; ++i) {
    r = i;
    for (j = i + 1; j <= n; ++j)
      if (myabs(s[j][i]) > myabs(s[r][i])) r = j;
    if (myabs(s[r][i]) < 1e-9) continue;
    if (r != i)
      for (j = 1; j <= n + 1; ++j) swap(s[r][j], s[i][j]);
    for (j = 1; j <= n; ++j)
      if (j != i)
        for (k = n + 1; k >= i; --k) s[j][k] -= s[j][i] * s[i][k] / s[i][i];
  }
}
int n, m, a, b, dg[25];
bool ok[25][25];
int main() {
  n = read(), m = read(), a = read(), b = read();
  for (int i = 1; i <= m; ++i) {
    int u = read(), v = read();
    ok[u][v] = ok[v][u] = 1;
  }
  for (int i = 1; i <= n; ++i)
    for (int j = 1; j <= n; ++j) dg[i] += ok[i][j];
  for (int i = 1; i <= n; ++i) scanf("%lf", &p[i]), ok[i][i] = 1;
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= n; ++j) {
      int st = (((i)-1) * n + (j)), ed;
      for (int k = 1; k <= n; ++k) {
        for (int l = 1; l <= n; ++l)
          if (k != l && ok[k][i] && ok[l][j]) {
            ed = (((k)-1) * n + (l));
            if (st == ed)
              s[st][ed] += p[i] * p[j];
            else {
              if (k == i) s[st][ed] += p[i] * (1.0 - p[l]) * (1.0 / dg[l]);
              if (l == j) s[st][ed] += p[j] * (1.0 - p[k]) * (1.0 / dg[k]);
              if (i != k && j != l)
                s[st][ed] +=
                    (1.0 - p[k]) * (1.0 - p[l]) * (1.0 / dg[k]) * (1.0 / dg[l]);
            }
          }
      }
      s[st][st] -= 1.0;
    }
  }
  s[(((a)-1) * n + (b))][n * n + 1] = -1.0;
  gs(n * n);
  for (int i = 1; i <= n; ++i) {
    int j = (((i)-1) * n + (i));
    printf("%.6lf ", s[j][n * n + 1] / s[j][j]);
  }
}
