#include <bits/stdc++.h>
using namespace std;
int id[510], n, m;
double a[510][510], ans[510];
double p[510];
const double eps = 1e-16;
inline bool is_digit(char c) { return c <= '9' && c >= '0'; }
inline int read() {
  int tmp = 0, f = 1;
  char c = getchar();
  while (!is_digit(c)) {
    if (c == '-') f = -f;
    c = getchar();
  }
  while (is_digit(c)) tmp = (tmp << 1) + (tmp << 3) + (c ^ 48), c = getchar();
  return tmp * f;
}
void write(int x) {
  if (x < 0) putchar('-'), x = -x;
  if (x > 9) write(x / 10);
  putchar((x % 10) ^ 48);
}
inline void Gauss(int n) {
  for (register int i = 1; i <= n; i++) {
    int k = i;
    for (register int j = i; j <= n; j++) {
      if (fabs(a[id[j]][i]) > fabs(a[id[k]][i])) {
        k = j;
      }
    }
    int aa = id[i], bb = id[k];
    id[i] = bb, id[k] = aa;
    for (register int j = 1; j <= n; j++) {
      if (id[i] == j) continue;
      for (register int k = i + 1; k <= n + 1; k++) {
        a[id[j]][k] -= a[id[i]][k] * a[id[j]][i] / a[id[i]][i];
      }
      a[id[j]][i] = 0.0;
    }
  }
  for (register int i = 1; i <= n; i++) {
    ans[i] = (a[id[i]][n + 1] / a[id[i]][i]);
  }
}
int s[125010], t[125010], rd[125010];
double f[125010];
int e[510][510], aa, bb;
int main() {
  scanf("%d%d%d%d", &n, &m, &aa, &bb);
  for (register int i = 1; i <= m; i++) {
    scanf("%d%d", s + i, t + i);
    rd[s[i]]++;
    rd[t[i]]++;
    e[s[i]][t[i]] = e[t[i]][s[i]] = 1;
  }
  for (register int i = 1; i <= n; i++) scanf("%lf", &p[i]);
  for (register int i = 1; i <= n * n; i++) {
    id[i] = i;
  }
  a[(aa - 1) * n + bb][n * n + 1] = -1;
  for (register int i = 1; i <= n; i++) {
    for (register int j = 1; j <= n; j++) {
      a[(i - 1) * n + j][(i - 1) * n + j]--;
      if (i != j) a[(i - 1) * n + j][(i - 1) * n + j] += p[i] * p[j];
      for (register int k = 1; k <= n; k++) {
        if (!e[i][k]) continue;
        for (register int l = 1; l <= n; l++) {
          if (!e[j][l]) continue;
          if (k == l) continue;
          a[(i - 1) * n + j][(k - 1) * n + l] =
              (1 - p[k]) * (1 - p[l]) / rd[k] / rd[l];
        }
      }
      for (int k = 1; k <= n; k++) {
        if (!e[i][k]) continue;
        if (k == j) continue;
        a[(i - 1) * n + j][(k - 1) * n + j] = (1 - p[k]) * p[j] / rd[k];
      }
      for (register int k = 1; k <= n; k++) {
        if (!e[j][k]) continue;
        if (k == i) continue;
        a[(i - 1) * n + j][(i - 1) * n + k] = p[i] * (1 - p[k]) / rd[k];
      }
    }
  }
  Gauss(n * n);
  for (register int i = 1; i <= n; i++) {
    printf("%.8lf ", (double)(ans[(i - 1) * n + i]));
  }
  return 0;
}
