#include <bits/stdc++.h>
using std::swap;
const int maxn = 30, maxm = 500;
double p[maxn], val, coe[maxm][maxm];
int n, m, a, b, x, y, s, cur, edge[maxn][maxn], deg[maxn], pos[maxn][maxn];
int main() {
  scanf("%d%d%d%d", &n, &m, &a, &b), s = n * n;
  for (int i = 1; i <= m; i++)
    scanf("%d%d", &x, &y), edge[x][y] = edge[y][x] = 1, ++deg[x], ++deg[y];
  for (int i = 1; i <= n; i++) scanf("%lf", p + i);
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++) pos[i][j] = i * n + j - n;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++) {
      if (i != j)
        coe[pos[i][j]][pos[i][j]] = 1 - p[i] * p[j];
      else
        coe[pos[i][j]][pos[i][j]] = 1;
      for (int _i = 1; _i <= n; _i++)
        if (edge[i][_i])
          for (int _j = 1; _j <= n; _j++)
            if (edge[j][_j])
              if (_i != _j)
                coe[pos[i][j]][pos[_i][_j]] =
                    -(1 - p[_i]) / deg[_i] * (1 - p[_j]) / deg[_j];
      for (int _i = 1; _i <= n; _i++)
        if (edge[i][_i])
          if (_i != j)
            coe[pos[i][j]][pos[_i][j]] = -(1 - p[_i]) / deg[_i] * p[j];
      for (int _j = 1; _j <= n; _j++)
        if (edge[j][_j])
          if (i != _j)
            coe[pos[i][j]][pos[i][_j]] = -p[i] * (1 - p[_j]) / deg[_j];
    }
  coe[pos[a][b]][0] = 1;
  for (int i = s; i; i--) {
    cur = i;
    for (int j = 1; j < i; j++)
      if (fabs(coe[j][i]) > fabs(coe[cur][i])) cur = j;
    if (cur != i) swap(coe[cur], coe[i]);
    val = coe[i][i];
    for (int j = 0; j <= i; j++) coe[i][j] /= val;
    for (int j = 1; j < i; j++)
      for (int k = 0; k <= i; k++) coe[j][k] -= coe[j][i] * coe[i][k];
  }
  for (int i = 1; i <= s; i++)
    for (int j = 1; j < i; j++) coe[i][0] -= coe[j][0] * coe[i][j];
  for (int i = 1; i <= n; i++) printf("%.10lf ", coe[pos[i][i]][0]);
  return 0;
}
