#include <bits/stdc++.h>
using namespace std;
int n, m, A, B;
double p[25];
double a[625][625], l[625][625], u[625][625];
vector<int> g[25];
double y[625], x[625], b[625];
int id[25][25];
void edge(int ea, int b, int c, int d, double e) {
  if (ea < b) swap(ea, b);
  if (c < d) swap(c, d);
  a[id[ea][b]][id[c][d]] += e;
}
int main() {
  scanf("%d %d %d %d", &n, &m, &A, &B);
  A--, B--;
  if (A < B) swap(A, B);
  for (int i = 0; i < (int)(m); i++) {
    int ue, v;
    scanf("%d %d", &ue, &v);
    ue--, v--;
    g[ue].push_back(v);
    g[v].push_back(ue);
  }
  for (int i = 0; i < (int)(n); i++) scanf("%lf", &p[i]);
  int N = 0;
  for (int i = 0; i < (int)(n); i++)
    for (int j = 0; j < (int)(i + 1); j++) id[i][j] = ++N;
  for (int i = 0; i < (int)(N + 1); i++)
    for (int j = 0; j < (int)(N + 1); j++) a[i][j] = 0;
  for (int i = 0; i < (int)(n); i++)
    for (int j = 0; j < (int)(i + 1); j++) {
      if (i == j) {
        edge(i, j, i, j, 1);
        continue;
      }
      edge(i, j, i, j, p[i] * p[j]);
      for (int q = 0; q < (int)(g[i].size()); q++) {
        int qi = g[i][q];
        edge(i, j, qi, j, (1 - p[i]) / g[i].size() * p[j]);
        for (int qq = 0; qq < (int)(g[j].size()); qq++) {
          int qj = g[j][qq];
          edge(i, j, qi, qj,
               (1 - p[i]) / g[i].size() * (1 - p[j]) / g[j].size());
        }
      }
      for (int qq = 0; qq < (int)(g[j].size()); qq++) {
        int qj = g[j][qq];
        edge(i, j, i, qj, (1 - p[j]) / g[j].size() * p[i]);
      }
    }
  for (int i = 0; i < (int)(n); i++)
    for (int j = 0; j < (int)(i); j++) a[id[i][j]][id[i][j]] -= 1;
  for (int j = 1; j <= N; j++) u[1][j] = a[1][j];
  for (int j = 2; j <= N; j++) l[j][1] = a[j][1] / u[1][1];
  for (int i = 2; i <= N; i++) {
    for (int j = i; j <= N; j++) {
      u[i][j] = a[i][j];
      for (int k = 1; k <= i - 1; k++) u[i][j] -= l[i][k] * u[k][j];
    }
    for (int j = i + 1; j <= N; j++) {
      l[j][i] = a[j][i];
      for (int k = 1; k <= i - 1; k++) l[j][i] -= l[j][k] * u[k][i];
      l[j][i] /= u[i][i];
    }
  }
  for (int i = 1; i <= N; i++) l[i][i] = 1.0;
  for (int d = 0; d < (int)(n); d++) {
    for (int i = 0; i < (int)(n); i++)
      for (int j = 0; j < (int)(i + 1); j++)
        if (i != j) {
          b[id[i][j]] = 0;
        } else
          b[id[i][j]] = i == d;
    for (int i = 1; i <= N; i++) {
      y[i] = b[i];
      for (int j = 1; j < i; j++) y[i] -= l[i][j] * y[j];
    }
    for (int i = N; i >= 1; i--) {
      x[i] = y[i];
      for (int j = i + 1; j <= N; j++) x[i] -= u[i][j] * x[j];
      x[i] /= u[i][i];
    }
    if (d) printf(" ");
    printf("%.8f", x[id[A][B]]);
  }
  printf("\n");
  return 0;
}
