#include <bits/stdc++.h>
using namespace std;
const int Maxn = 25;
int n, m, a, b;
vector<int> vec[Maxn];
double p[Maxn];
double mat[Maxn * Maxn][Maxn * Maxn], mat1[Maxn * Maxn][Maxn * Maxn];
void build() {
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < n; ++j) {
      if (i == j)
        mat[i * n + j][n * n] = 0, mat[i * n + j][i * n + j] = 1;
      else {
        for (int ii = 0; ii < vec[i].size(); ++ii) {
          int u = vec[i][ii];
          double piu = (u == i ? p[i] : (1 - p[i]) / (vec[i].size() - 1));
          for (int jj = 0; jj < vec[j].size(); ++jj) {
            int v = vec[j][jj];
            double pjv = (v == j ? p[j] : (1 - p[j]) / (vec[j].size() - 1));
            double pp = piu * pjv;
            if (i == u && j == v)
              mat[i * n + j][i * n + j] = (pp - 1);
            else
              mat[i * n + j][u * n + v] = pp;
          }
        }
      }
    }
  }
}
int eps(double x, double y) {
  if (fabs(x - y) < 1e-10) return 0;
  return x < y ? -1 : 1;
}
double ans[Maxn * Maxn];
bool gauss(double mat[][Maxn * Maxn], int n) {
  int id[Maxn * Maxn];
  for (int i = 0; i < n; ++i) {
    for (id[i] = 0; id[i] < n && eps(mat[i][id[i]], 0) == 0; ++id[i])
      ;
    if (id[i] == n) {
      if (eps(mat[i][id[i]], 0) == 0) continue;
      return false;
    }
    for (int j = id[i] + 1; j <= n; ++j) mat[i][j] /= mat[i][id[i]];
    mat[i][id[i]] = 1;
    for (int ii = i + 1; ii < n; ++ii) {
      if (eps(mat[ii][id[i]], 0) == 0) continue;
      double tmp = mat[ii][id[i]];
      for (int j = id[i]; j <= n; ++j) mat[ii][j] -= tmp * mat[i][j];
    }
  }
  for (int i = n - 1; i >= 0; --i) {
    if (id[i] == n) continue;
    ans[id[i]] = mat[i][n];
    for (int ii = i - 1; ii >= 0; --ii) {
      if (eps(mat[ii][id[i]], 0) == 0) continue;
      mat[ii][n] -= mat[ii][id[i]] * mat[i][n];
      mat[ii][id[i]] = 0;
    }
  }
  return 1;
}
double solve(int k) {
  for (int i = 0; i < n * n; ++i)
    for (int j = 0; j <= n * n; ++j) mat1[i][j] = mat[i][j];
  mat1[k * n + k][n * n] = 1;
  gauss(mat1, n * n);
  return ans[a * n + b];
}
int main() {
  scanf("%d%d%d%d", &n, &m, &a, &b);
  a--, b--;
  for (int i = 0; i < m; ++i) {
    int x, y;
    scanf("%d%d", &x, &y);
    x--, y--;
    vec[x].push_back(y);
    vec[y].push_back(x);
  }
  for (int i = 0; i < n; ++i) {
    vec[i].push_back(i);
    scanf("%lf", p + i);
  }
  build();
  for (int i = 0; i < n; ++i) {
    printf("%.8f ", solve(i));
  }
  puts("");
  return 0;
}
