#include <bits/stdc++.h>
using namespace std;
int Nextint() {
  char ch = getchar();
  while (ch < '0' || ch > '9') ch = getchar();
  int x = 0;
  while (ch >= '0' && ch <= '9') {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  return x;
}
const int maxn = 23;
double P[maxn * maxn][maxn * maxn], P1[maxn], ans[maxn * maxn];
int ts = 0, N, M, a, b, A[maxn][maxn], len[maxn];
int mk[maxn][maxn], tk, tot;
void mw(int x, int y, double t) { P[y][x] += t; }
double yxabs(double t) {
  if (t < 0) t = -t;
  return t;
}
void Dfs(int x) {
  if (x == tot) {
    if (P[x][x] > 1E-7 || P[x][x] < -1E-7) ans[x] = P[x][0] / P[x][x];
    return;
  }
  if (yxabs(P[x][x]) < 1E-7) {
    int t = x + 1;
    while (yxabs(P[t][x]) < 1E-7 && t <= tot) t++;
    if (t > tot) {
      Dfs(x + 1);
      return;
    }
    for (int i = x; i <= tot; i++) swap(P[t][i], P[x][i]);
    swap(P[t][0], P[x][0]);
  }
  for (int i = x + 1; i <= tot; i++) {
    for (int j = x + 1; j <= tot; j++) P[i][j] -= P[x][j] / P[x][x] * P[i][x];
    P[i][0] -= P[x][0] / P[x][x] * P[i][x];
  }
  Dfs(x + 1);
  for (int i = x + 1; i <= tot; i++) {
    P[x][0] -= P[x][i] * ans[i];
    ans[x] = P[x][0] / P[x][x];
  }
}
int main() {
  N = Nextint();
  M = Nextint();
  a = Nextint();
  b = Nextint();
  tot = N * N;
  for (int i = 1; i <= M; i++) {
    int X = Nextint(), Y = Nextint();
    A[X][++len[X]] = Y;
    A[Y][++len[Y]] = X;
  }
  for (int i = 1; i <= N; i++) scanf("%lf", &P1[i]);
  for (int i = 1; i <= N; i++)
    for (int j = 1; j <= N; j++) mk[i][j] = ++tk;
  for (int i = 1; i <= tk; i++) P[i][i] = -1;
  for (int i = 1; i <= N; i++)
    for (int j = 1; j <= N; j++)
      if (i != j) {
        mw(mk[i][j], mk[i][j], P1[i] * P1[j]);
        double t1 = P1[i] * (1 - P1[j]) / len[j];
        for (int k1 = 1; k1 <= len[j]; k1++) mw(mk[i][j], mk[i][A[j][k1]], t1);
        t1 = P1[j] * (1 - P1[i]) / len[i];
        for (int k1 = 1; k1 <= len[i]; k1++) mw(mk[i][j], mk[A[i][k1]][j], t1);
        t1 = (1 - P1[i]) / len[i] * (1 - P1[j]) / len[j];
        for (int k1 = 1; k1 <= len[i]; k1++)
          for (int k2 = 1; k2 <= len[j]; k2++)
            mw(mk[i][j], mk[A[i][k1]][A[j][k2]], t1);
      }
  P[mk[a][b]][0] = -1;
  Dfs(1);
  printf("%.9lf", ans[mk[1][1]] + 1E-8);
  for (int i = 2; i <= N; i++) printf(" %.9lf", ans[mk[i][i]] + 1E-8);
  printf("\n");
  return 0;
}
