#include <bits/stdc++.h>
using namespace std;
const int MAXN = 23;
int n, m, start_x, start_y;
bool g[MAXN][MAXN];
int d[MAXN];
double pro[MAXN], tr[MAXN][MAXN];
int nm[MAXN][MAXN], nmn = 0;
double trs[MAXN * MAXN][MAXN * MAXN];
double a[MAXN * MAXN][MAXN * MAXN], b[MAXN * MAXN][MAXN];
double ans[MAXN * MAXN][MAXN];
inline double Fabs(double t) {
  if (t > 0) return t;
  return -t;
}
void work() {
  for (int i = 1; i <= nmn; i++) {
    int p = i;
    for (int j = i; j <= nmn; j++)
      if (Fabs(a[j][i]) > Fabs(a[p][i])) p = j;
    if (p != i) {
      for (int j = 1; j <= nmn; j++) swap(a[p][j], a[i][j]);
      for (int j = 1; j <= n; j++) swap(b[p][j], b[i][j]);
    }
    for (int j = i + 1; j <= nmn; j++) {
      double r = a[j][i] / a[i][i];
      for (int k = 1; k <= nmn; k++) a[j][k] -= a[i][k] * r;
      for (int k = 1; k <= n; k++) b[j][k] -= b[i][k] * r;
    }
  }
  for (int i = nmn; i >= 1; i--) {
    for (int j = 1; j <= n; j++) ans[i][j] = b[i][j] / a[i][i];
    for (int j = 1; j < i; j++) {
      double r = a[j][i] / a[i][i];
      for (int k = 1; k <= n; k++) b[j][k] -= b[i][k] * r;
    }
  }
}
int main() {
  scanf("%d%d%d%d", &n, &m, &start_x, &start_y);
  if (start_x == start_y) {
    for (int i = 1; i <= n; i++) {
      if (i != start_x)
        printf("0 ");
      else
        printf("1 ");
    }
    printf("\n");
    return 0;
  }
  for (int i = 1; i <= m; i++) {
    int p, q;
    scanf("%d%d", &p, &q);
    g[p][q] = g[q][p] = true;
    d[p]++;
    d[q]++;
  }
  for (int i = 1; i <= n; i++) scanf("%lf", &pro[i]);
  for (int i = 1; i <= n; i++) {
    tr[i][i] = pro[i];
    double r = (1 - pro[i]) / d[i];
    for (int j = 1; j <= n; j++)
      if (g[i][j]) tr[i][j] = r;
  }
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= i; j++) nm[i][j] = nm[j][i] = ++nmn;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= i; j++)
      for (int k = 1; k <= n; k++)
        for (int l = 1; l <= k; l++)
          trs[nm[i][j]][nm[k][l]] +=
              tr[i][k] * tr[j][l] + (k == l ? 0 : tr[i][l] * tr[j][k]);
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= i; j++) {
      if (i == j)
        a[nm[i][j]][nm[i][j]] = 1, b[nm[i][j]][i] = 1;
      else {
        a[nm[i][j]][nm[i][j]] = 1;
        for (int k = 1; k <= nmn; k++) a[nm[i][j]][k] -= trs[nm[i][j]][k];
      }
    }
  work();
  for (int i = 1; i <= n; i++) printf("%.9lf ", ans[nm[start_x][start_y]][i]);
  printf("\n");
  return 0;
}
