#include <bits/stdc++.h>
using namespace std;
const long long LINF = 1e18 + 7;
const unsigned long long BASE = 33;
const int N = 24;
const int INF = 1e9 + 7;
const int MOD = 1e9 + 7;
const double Pi = acos(-1.);
const double EPS = 1e-8;
long long kpow(long long a, long long b) {
  long long ret = 1;
  for (; b; b >>= 1, a = a * a)
    if (b & 1) ret = ret * a;
  return ret;
}
int n, m, a, b, deg[N], d[N][N];
double f[N][N], g[N * N][N * N];
int main() {
  scanf("%d%d%d%d", &n, &m, &a, &b);
  --a, --b;
  for (int i = 0; i < (m); ++i) {
    int u, v;
    scanf("%d%d", &u, &v);
    --u, --v;
    ++deg[u], ++deg[v], d[u][v] = d[v][u] = 1;
  }
  for (int i = 0; i < (n); ++i) scanf("%lf", &f[i][i]);
  for (int i = 0; i < (n); ++i)
    for (int j = 0; j < (n); ++j)
      if (i != j && d[i][j]) f[i][j] = (1.0 - f[i][i]) / deg[i];
  for (int i = 0; i < (n); ++i)
    for (int j = 0; j < (n); ++j) {
      g[i * n + j][i * n + j] = -1;
      for (int x = 0; x < (n); ++x)
        for (int y = 0; y < (n); ++y)
          if (x != y) {
            g[i * n + j][x * n + y] += f[x][i] * f[y][j];
          }
    }
  int NN = n * n;
  g[a * n + b][NN] = -1.0;
  for (int i = 0; i < (NN); ++i) {
    int r = i;
    for (int j = i + 1; j < (NN); ++j)
      if (fabs(g[j][i]) > fabs(g[r][i])) r = j;
    for (int j = i; j < (NN + 1); ++j) swap(g[i][j], g[r][j]);
    double tmp = g[i][i];
    for (int j = i; j < (NN + 1); ++j) g[i][j] /= tmp;
    for (int k = 0; k < (NN); ++k)
      if (i != k) {
        tmp = g[k][i];
        for (int j = i; j < (NN + 1); ++j) g[k][j] -= tmp * g[i][j];
      }
  }
  for (int i = 0; i < (n); ++i) {
    if (i) putchar(' ');
    printf("%.10lf", g[i * n + i][NN]);
  }
  return 0;
}
