#include <bits/stdc++.h>
using namespace std;
const long double eps = 1e-13;
int n, m, aa, bb;
int hed[50], nxt[505], to[505], cnt, d[50];
long double p[50], a[500][500], x[500];
void adde(int u, int v) {
  d[u]++;
  cnt++;
  to[cnt] = v;
  nxt[cnt] = hed[u];
  hed[u] = cnt;
}
int cue(int i, int j) { return (i - 1) * n + j; }
void gauss(int nn) {
  for (int i = 1; i <= nn; i++) {
    if (abs(a[i][i]) <= eps) {
      int id = 0;
      for (int j = i + 1; j <= nn; j++) {
        if (abs(a[j][i]) > eps) {
          id = j;
          break;
        }
      }
      if (id != 0) {
        for (int j = 1; j <= nn + 1; j++) {
          swap(a[id][j], a[i][j]);
        }
      } else
        continue;
    }
    for (int j = i + 1; j <= nn; j++) {
      long double l = a[j][i] / a[i][i];
      for (int k = i; k <= nn + 1; k++) {
        a[j][k] -= l * a[i][k];
      }
    }
  }
  for (int i = nn; i >= 1; i--) {
    for (int j = nn; j >= i + 1; j--) {
      a[i][nn + 1] -= a[i][j] * x[j];
    }
    x[i] = a[i][nn + 1] / a[i][i];
  }
}
int main() {
  scanf("%d%d%d%d", &n, &m, &aa, &bb);
  for (int i = 1; i <= m; i++) {
    int u, v;
    scanf("%d%d", &u, &v);
    adde(u, v);
    adde(v, u);
  }
  for (int i = 1; i <= n; i++) {
    cin >> p[i];
  }
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) {
      int tmp = cue(i, j);
      if (i == aa && j == bb) {
        a[tmp][tmp] = 1;
        a[tmp][n * n + 1] = 1;
        continue;
      }
      a[tmp][tmp] = 1;
      if (i != j) a[tmp][tmp] -= p[i] * p[j];
      for (int ii = hed[i]; ii != 0; ii = nxt[ii]) {
        int v = to[ii];
        if (v != j)
          a[tmp][cue(v, j)] -= (1 - p[v]) * p[j] / ((long double)(d[v]));
        for (int jj = hed[j]; jj != 0; jj = nxt[jj]) {
          int vv = to[jj];
          if (v != vv)
            a[tmp][cue(v, vv)] -= (1 - p[v]) * (1 - p[vv]) /
                                  ((long double)(d[v]) * (long double)(d[vv]));
        }
      }
      for (int jj = hed[j]; jj != 0; jj = nxt[jj]) {
        int v = to[jj];
        if (v != i)
          a[tmp][cue(i, v)] -= p[i] * (1 - p[v]) / ((long double)(d[v]));
      }
    }
  }
  gauss(n * n);
  long double qwq = 0;
  for (int i = 1; i <= n; i++) {
    qwq += x[cue(i, i)];
  }
  for (int i = 1; i <= n; i++) {
    cout << fixed << setprecision(10) << 1.0 * x[cue(i, i)] / qwq << " ";
  }
  cout << endl;
  return 0;
}
