#include <bits/stdc++.h>
using namespace std;
const int N = 25;
int mp[N][N], du[N];
double p[N], a[N * N][N * N], k[N], f[N], num[N][N];
int n, m, X, Y, mx;
double ans[N];
void fillmatrix(int t);
double gauss(int n);
void solve(int t);
void Fill(int x, int y);
int Id(int x, int y) { return num[x][y]; }
int main() {
  int x, y;
  scanf("%d%d%d%d", &n, &m, &X, &Y);
  for (int i = 1; i <= m; ++i) {
    scanf("%d%d", &x, &y);
    mp[x][y] = mp[y][x] = 1;
    ++du[x];
    ++du[y];
  }
  if (X == Y) {
    for (int i = 1; i <= n; ++i)
      if (i == X)
        printf("%.10lf\n", 1.0);
      else
        printf("%.10lf\n", 0.0);
    return 0;
  }
  for (int i = 1; i <= n; ++i) scanf("%lf", p + i);
  for (int i = 1; i <= n; ++i) k[i] = (1.0 - p[i]) / (1.0 * du[i]);
  mx = 0;
  for (int i = 1; i <= n; ++i)
    for (int j = 1; j <= n; ++j)
      if (i != j) num[i][j] = ++mx;
  for (int i = 1; i <= n; ++i) solve(i);
  for (int i = 1; i <= n; ++i) printf("%.10lf ", ans[i]);
  printf("\n");
}
void solve(int t) {
  fillmatrix(t);
  ans[t] = gauss(mx);
}
void fillmatrix(int t) {
  int id;
  memset(a, 0, sizeof(a));
  memset(f, 0, sizeof(f));
  f[t] = 1;
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= n; ++j) {
      if (i != j) Fill(i, j);
    }
  }
}
void Fill(int x, int y) {
  int id = Id(x, y);
  a[id][id] = p[x] * p[y] - 1.0;
  for (int i = 1; i <= n; ++i) {
    if (mp[i][x]) {
      if (i != y)
        a[id][Id(i, y)] += k[x] * p[y];
      else
        a[id][mx + 1] -= k[x] * p[y] * f[y];
    }
    if (mp[i][y]) {
      if (i != x)
        a[id][Id(x, i)] += k[y] * p[x];
      else
        a[id][mx + 1] -= k[y] * p[x] * f[x];
    }
    for (int j = 1; j <= n; ++j) {
      if (mp[i][x] && mp[j][y]) {
        if (i != j)
          a[id][Id(i, j)] += k[x] * k[y];
        else
          a[id][mx + 1] -= k[x] * k[y] * f[j];
      }
    }
  }
}
double gauss(int n) {
  int id;
  double tmp;
  for (int i = 1; i <= n; ++i) {
    id = i;
    for (int j = i + 1; j <= n; ++j)
      if (fabs(a[j][i]) > fabs(a[id][i])) id = j;
    if (id != i)
      for (int j = 1; j <= n + 1; ++j) swap(a[i][j], a[id][j]);
    for (int j = i + 1; j <= n; ++j) {
      tmp = a[j][i] / a[i][i];
      for (int k = i; k <= n + 1; ++k) a[j][k] -= tmp * a[i][k];
    }
  }
  for (int i = n; i >= 1; --i) {
    for (int j = n; j > i; --j) a[i][n + 1] -= a[i][j] * a[j][n + 1];
    a[i][n + 1] /= a[i][i];
  }
  return a[Id(X, Y)][mx + 1];
}
