#include <bits/stdc++.h>
using namespace std;
struct nood {
  int x, y, z;
} q[1111];
int k[25], d[25];
int a, b, n, s;
double p[25], f[25 * 25][25 * 25];
inline int r() {
  char h = getchar();
  int y = 0, q = 1;
  while (h < '0' || h > '9') {
    if (h == '-') q = -1;
    h = getchar();
  }
  while (h >= '0' && h <= '9') {
    y = y * 10 + h - '0';
    h = getchar();
  }
  return y * q;
}
inline double rd() {
  char h = getchar();
  double y = 0, q = 1, j = 0, jz = 0.1;
  bool b = 1;
  while (h < '0' || h > '9') {
    if (h == '-') q = -1;
    h = getchar();
  }
  while ((h >= '0' && h <= '9') || h == '.') {
    if (h == '.') {
      b = 0;
      h = getchar();
      continue;
    }
    if (b)
      y = y * 10 + h - '0';
    else
      j = j + jz * (h - '0'), jz /= 10;
    h = getchar();
  }
  return q * (y + j);
}
inline void jr(int a, int b) {
  q[++s] = nood{k[a], b};
  k[a] = s;
}
inline int zh(int a, int b) { return (a - 1) * n + b; }
signed main() {
  n = r();
  int m = r();
  a = r();
  b = r();
  for (int i = 1; i <= m; i++) {
    int x = r(), y = r();
    jr(x, y);
    jr(y, x);
    d[x]++;
    d[y]++;
  }
  for (int i = 1; i <= n; i++) p[i] = rd();
  int nn = n * n;
  f[zh(a, b)][nn + 1] = -1;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++) {
      int x = zh(i, j);
      --f[x][x];
      if (i != j) f[x][x] += p[i] * p[j];
      for (int ii = k[i]; ii; ii = q[ii].x)
        for (int jj = k[j]; jj; jj = q[jj].x) {
          int y1 = q[ii].y, y2 = q[jj].y;
          if (y1 == y2) continue;
          f[x][zh(y1, y2)] += (1 - p[y1]) * (1 - p[y2]) / d[y1] / d[y2];
        }
      for (int ii = k[i]; ii; ii = q[ii].x) {
        int y = q[ii].y;
        if (y == j) continue;
        f[x][zh(y, j)] += (1 - p[y]) * (p[j]) / d[y];
      }
      for (int jj = k[j]; jj; jj = q[jj].x) {
        int y = q[jj].y;
        if (y == i) continue;
        f[x][zh(i, y)] += (1 - p[y]) * (p[i]) / d[y];
      }
    }
  for (int i = 1; i <= nn; i++) {
    int k = 0;
    for (int j = i; j <= nn; j++)
      if (fabs(f[j][i]) > fabs(f[k][i])) k = j;
    for (int j = 1; j <= nn + 1; j++) swap(f[i][j], f[k][j]);
    for (int j = 1; j <= nn; j++)
      if (i != j) {
        double q = f[j][i] / f[i][i];
        for (int k = i + 1; k <= nn + 1; k++) f[j][k] -= f[i][k] * q;
      }
  }
  for (int i = 1; i <= n; i++)
    printf("%.10lf ", f[zh(i, i)][nn + 1] / f[zh(i, i)][zh(i, i)]);
}
