#include <bits/stdc++.h>
using namespace std;
const int MAXN = 25;
const double EPS = 1e-9;
bool graph[MAXN][MAXN];
int degree[MAXN];
double p[MAXN];
double a[MAXN * MAXN][MAXN * MAXN];
double x[MAXN * MAXN];
int equ, var;
void BuildEquation(int n, int target) {
  int i, j, k, h, cur;
  double t1, t2;
  equ = var = n * n;
  for (i = 0; i < equ; ++i)
    for (j = 0; j <= var; ++j) a[i][j] = 0;
  for (i = 1; i <= n; ++i) {
    for (j = 1; j <= n; ++j) {
      cur = (i - 1) * n + j - 1;
      a[cur][cur] = 1;
      if (i == j) {
        a[cur][var] = i == target ? 1 : 0;
      } else {
        for (k = 1; k <= n; ++k) {
          if (k != i && !graph[i][k]) continue;
          for (h = 1; h <= n; ++h) {
            if (h != j && !graph[j][h]) continue;
            t1 = k == i ? p[i] : (1 - p[i]) / degree[i];
            t2 = h == j ? p[j] : (1 - p[j]) / degree[j];
            a[cur][(k - 1) * n + h - 1] -= t1 * t2;
          }
        }
      }
    }
  }
}
void Gauss() {
  int i, j, k;
  int max_r;
  int col;
  double t;
  col = 0;
  for (k = 0; k < equ && col < var; k++, col++) {
    max_r = k;
    for (i = k + 1; i < equ; i++) {
      if (fabs(a[i][col]) > fabs(a[max_r][col])) max_r = i;
    }
    if (max_r != k) {
      for (j = k; j < var + 1; j++) swap(a[k][j], a[max_r][j]);
    }
    if (fabs(a[k][col]) < EPS) {
      k--;
      continue;
    }
    for (i = k + 1; i < equ; i++) {
      if (fabs(a[i][col]) > EPS) {
        t = a[i][col] / a[k][col];
        for (j = col; j < var + 1; j++) {
          a[i][j] -= a[k][j] * t;
        }
      }
    }
  }
  for (i = var - 1; i >= 0; i--) {
    t = a[i][var];
    for (j = i + 1; j < var; j++) {
      if (fabs(a[i][j]) > EPS) t -= a[i][j] * x[j];
    }
    x[i] = t / a[i][i];
  }
}
int main() {
  int n, m, a, b, i, u, v;
  while (scanf("%d %d %d %d", &n, &m, &a, &b) != EOF) {
    memset(graph, 0, sizeof(graph));
    memset(degree, 0, sizeof(degree));
    for (i = 1; i <= m; ++i) {
      scanf("%d %d", &u, &v);
      graph[u][v] = graph[v][u] = true;
      degree[u]++;
      degree[v]++;
    }
    for (i = 1; i <= n; ++i) scanf("%lf", &p[i]);
    for (i = 1; i <= n; ++i) {
      BuildEquation(n, i);
      Gauss();
      if (i != 1) printf(" ");
      printf("%lf", x[(a - 1) * n + b - 1]);
    }
    printf("\n");
  }
}
