#include <bits/stdc++.h>
using namespace std;
const int maxn = 22 + 5;
const double EPS = 1e-10;
typedef double matrix[maxn * maxn][maxn * maxn];
int n, m, a, b, g[maxn][maxn], d[maxn], s, t;
double p[maxn][maxn];
matrix A;
int calc(int i, int j) { return (i - 1) * n + j; }
void Gauss(matrix a) {
  int N = calc(n, n);
  for (int i = 1; i <= N; ++i) {
    int j = i;
    for (int k = i + 1; k <= N; ++k)
      if (fabs(a[k][i]) > fabs(a[j][i])) j = k;
    if (j != i) {
      swap(a[j][0], a[i][0]);
      for (int k = i; k <= N; ++k) swap(a[j][k], a[i][k]);
    }
    double tmp = a[i][i];
    if (fabs(tmp) > EPS) {
      a[i][0] /= tmp;
      for (int k = i; k <= N; ++k) a[i][k] /= tmp;
    }
    for (int k = i + 1; k <= N; ++k)
      if (fabs(a[k][i]) > EPS) {
        double tmp = a[k][i];
        for (int l = i; l <= N; ++l) a[k][l] -= a[i][l] * tmp;
        a[k][0] -= a[i][0] * tmp;
      }
  }
  for (int i = N - 1; i >= 1; --i) {
    for (int j = i + 1; j <= N; ++j) a[i][0] -= a[i][j] * a[j][0];
  }
}
int main() {
  scanf("%d %d %d %d", &n, &m, &s, &t);
  for (int i = 0; i < m; i++) {
    scanf("%d %d", &a, &b);
    g[a][b] = g[b][a] = 1;
    d[a]++, d[b]++;
  }
  for (int i = 1; i <= n; i++) {
    scanf("%lf", &p[i][i]);
    for (int j = 1; j <= n; j++)
      if (i != j && g[i][j]) p[i][j] = (1 - p[i][i]) / d[i];
  }
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++) {
      A[calc(i, j)][calc(i, j)] = -1;
      if (i != j)
        for (int x = 1; x <= n; x++)
          for (int y = 1; y <= n; y++)
            A[calc(x, y)][calc(i, j)] += p[i][x] * p[j][y];
    }
  A[calc(s, t)][0] = -1;
  Gauss(A);
  for (int i = 1; i <= n; i++) printf("%.7lf\n", A[calc(i, i)][0]);
  return 0;
}
