#include <bits/stdc++.h>
using namespace std;
struct pr {
  int x, y;
};
const int N = 23;
pr b[N * N];
int n, m, s, t, a[N][N], ps[N][N], tcnt;
int jie(pr a) { return ps[a.x][a.y]; }
pr sw(pr a) { return (pr){a.y, a.x}; }
pr jm(int x) { return b[x]; }
double g[N * N][N * N], p[N], f[N * N][2], c[N * N][N * N], du[N];
void zi() {
  int w = tcnt;
  register int i, j, k;
  pr o, u;
  for (i = 1; i <= w; i++) {
    o = jm(i);
    for (j = 1; j <= w; j++) {
      c[i][j] = 0;
      for (k = 1; k <= w; k++) c[i][j] += g[i][k] * g[k][j];
    }
  }
  for (i = 1; i <= w; i++)
    for (j = 1; j <= w; j++) {
      g[i][j] = c[i][j];
    }
}
int main() {
  cin >> n >> m >> s >> t;
  for (int i = 1; i <= n; i++)
    for (int j = i; j <= n; j++) ps[i][j] = ++tcnt, b[tcnt] = {i, j};
  for (int i = 1, x, y; i <= m; i++) {
    scanf("%d%d", &x, &y);
    du[x]++;
    du[y]++;
    a[x][y] = a[y][x] = 1;
  }
  for (int i = 1; i <= n; i++) scanf("%lf", &p[i]), a[i][i] = 1;
  if (s > t) swap(s, t);
  f[jie({s, t})][0] = 1;
  for (int i = 1; i <= n; i++) {
    for (int j = i; j <= n; j++) {
      int o = jie({i, j});
      if (i == j) {
        g[o][o] = 1;
        continue;
      }
      for (int k = 1; k <= n; k++) {
        for (int l = k; l <= n; l++) {
          if (a[j][l] && a[i][k])
            if (i != k) {
              if (j != l)
                g[jie({k, l})][o] += (1.0 - p[i]) / du[i] * (1 - p[j]) / du[j];
              else
                g[jie({k, l})][o] += (1.0 - p[i]) / du[i] * p[j];
            } else {
              if (j != l)
                g[jie({k, l})][o] += p[i] * (1 - p[j]) / du[j];
              else
                g[jie({k, l})][o] += p[i] * p[j];
            }
          if (!a[i][l] || !a[j][k]) continue;
          swap(k, l);
          if (i != k) {
            if (j != l)
              g[jie({l, k})][o] += (1.0 - p[i]) / du[i] * (1 - p[j]) / du[j];
            else
              g[jie({l, k})][o] += (1.0 - p[i]) / du[i] * p[j];
          } else {
            if (j != l)
              g[jie({l, k})][o] += p[i] * (1 - p[j]) / du[j];
            else
              g[jie({l, k})][o] += p[i] * p[j];
          }
          swap(k, l);
        }
      }
    }
  }
  int o = 17;
  while (o--) {
    zi();
  }
  for (int i = 1; i <= tcnt; i++) {
    for (int j = 1; j <= tcnt; j++) f[i][1] += g[i][j] * f[j][0];
  }
  if (s == t) f[jie({s, s})][1] *= 2;
  for (int i = 1; i <= n; i++) printf("%.12lf ", f[jie({i, i})][1] / 2);
}
