#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;
}
