#include <bits/stdc++.h>
using namespace std;
const int MAXS = 500;
const long double eps = 1e-7;
int n, m, d[30], tx, ty, mx;
long double pstay[30], g[30][30], G[MAXS][MAXS], A[MAXS][MAXS], B[MAXS],
    ans[MAXS];
vector<int> edge[30];
inline int turn(int x, int y) { return (x - 1) * n + y; }
void Gauss_Elimination() {
  for (int i = 1; i < mx; ++i) {
    int p = i;
    for (int j = i + 1; j <= mx; ++j)
      if (fabs(A[j][i]) > fabs(A[p][i])) p = j;
    if (p != i) {
      for (int j = 1; j <= mx; ++j) swap(A[i][j], A[p][j]);
      swap(B[i], B[p]);
    }
    for (int j = i + 1; j <= mx; ++j) {
      long double e = A[j][i] / A[i][i];
      for (int k = i; k <= mx; ++k) A[j][k] -= e * A[i][k];
      B[j] -= e * B[i];
    }
  }
  ans[mx] = B[mx] / A[mx][mx];
  for (int i = mx - 1; i; --i) {
    for (int j = i + 1; j <= mx; ++j) B[i] -= A[i][j] * ans[j];
    ans[i] = B[i] / A[i][i];
  }
}
int main() {
  scanf("%d %d %d %d", &n, &m, &tx, &ty);
  mx = n * n;
  for (int i = 1; i <= m; ++i) {
    int x, y;
    scanf("%d %d", &x, &y);
    ++d[x];
    ++d[y];
    edge[x].push_back(y);
    edge[y].push_back(x);
  }
  for (int i = 1; i <= n; ++i) cin >> pstay[i];
  for (int i = 1; i <= n; ++i) {
    g[i][i] = pstay[i];
    long double tmp = (1.0 - pstay[i]) / d[i];
    for (vector<int>::iterator j = edge[i].begin(); j != edge[i].end(); ++j)
      g[i][*j] = tmp;
  }
  for (int i = 1; i <= n; ++i)
    for (int j = 1; j <= n; ++j) {
      if (i == j) continue;
      int s = turn(i, j);
      for (int k = 1; k <= n; ++k)
        for (int l = 1; l <= n; ++l) {
          int t = turn(k, l);
          long double tmp = g[i][k] * g[j][l];
          G[s][t] = tmp;
        }
    }
  for (int i = 1; i <= mx; ++i) A[i][i] = -1.0;
  B[turn(tx, ty)] = -1.0;
  for (int i = 1; i <= n; ++i)
    for (int j = 1; j <= n; ++j) {
      if (i == j) continue;
      int s = turn(i, j);
      for (int k = 1; k <= n; ++k)
        for (int l = 1; l <= n; ++l) {
          int t = turn(k, l);
          A[t][s] += G[s][t];
        }
    }
  Gauss_Elimination();
  for (int i = 1; i <= n; ++i) {
    int cur = turn(i, i);
    printf("%.10lf ", (double)ans[cur]);
  }
  return 0;
}
