#include <bits/stdc++.h>
using namespace std;
const int NR = 25;
const double eps = 1e-10;
int n, m, w, deg[NR];
double p[NR];
bool flag[NR][NR];
double a[NR * NR][NR * NR];
int calc(int x, int y) { return (x - 1) * n + y; }
void Gauss() {
  for (int i = 1; i <= w; i++) {
    int pos = i;
    for (int j = i + 1; j <= w; j++)
      if (fabs(a[j][i]) > fabs(a[pos][i])) pos = j;
    swap(a[pos], a[i]);
    if (fabs(a[i][i]) < eps) continue;
    for (int j = 1; j <= w; j++)
      if (i != j) {
        double d = a[j][i] / a[i][i];
        for (int k = i; k <= w + 1; k++) a[j][k] -= a[i][k] * d;
      }
  }
  for (int i = 1; i <= w; i++) a[i][m + 1] /= a[i][i];
}
int x, y;
int main() {
  scanf("%d %d %d %d", &n, &m, &x, &y);
  for (int i = 1; i <= m; i++) {
    int x, y;
    cin >> x >> y;
    deg[x]++;
    deg[y]++;
    flag[x][y] = flag[y][x] = 1;
  }
  for (int i = 1; i <= n; i++) scanf("%lf", &p[i]);
  w = n * n;
  a[calc(x, y)][w + 1] = 1;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++) {
      a[calc(i, j)][calc(i, j)] = 1 - (i == j ? 0 : p[i] * p[j]);
      for (int u = 1; u <= n; u++)
        for (int v = 1; v <= n; v++)
          if (u != v && flag[i][u] && flag[j][v])
            a[calc(i, j)][calc(u, v)] =
                -(1 - p[u]) / deg[u] * (1 - p[v]) / deg[v];
      for (int u = 1; u <= n; u++)
        if (u != j && flag[i][u])
          a[calc(i, j)][calc(u, j)] = -(1 - p[u]) / deg[u] * p[j];
      for (int v = 1; v <= n; v++)
        if (i != v && flag[j][v])
          a[calc(i, j)][calc(i, v)] = -p[i] * (1 - p[v]) / deg[v];
    }
  Gauss();
  for (int i = 1; i <= n; i++) printf("%.9f ", a[calc(i, i)][w + 1]);
  return 0;
}
