#include <bits/stdc++.h>
using namespace std;
double A[490][490];
double deg[25], p[25], ans[490];
bool Map[25][25];
int n, m, a, b;
double Fabs(double x) { return x > 0 ? x : -x; }
int Get_Id(int x, int y) { return (x - 1) * n + y; }
void Gauss() {
  int K = Get_Id(n, n);
  for (int i = 1; i <= K; i++) {
    int pos = i;
    for (int j = i + 1; j <= K; j++) {
      if (Fabs(A[pos][i]) < Fabs(A[j][i])) pos = j;
    }
    swap(A[pos], A[i]);
    double div = A[i][i];
    for (int j = i; j <= K + 1; j++) A[i][j] /= div;
    for (int j = i + 1; j <= K; j++) {
      div = A[j][i];
      for (int k = i; k <= K + 1; k++) A[j][k] -= div * A[i][k];
    }
  }
  ans[K] = A[K][K + 1];
  for (int i = K - 1; i >= 1; i--) {
    ans[i] = A[i][K + 1];
    for (int j = K; j >= i + 1; j--) ans[i] -= ans[j] * A[i][j];
  }
}
int main() {
  scanf("%d %d %d %d", &n, &m, &a, &b);
  for (int i = 1, u, v; i <= m; i++) {
    scanf("%d %d", &u, &v);
    Map[u][v] = Map[v][u] = 1;
    deg[u]++, deg[v]++;
  }
  A[Get_Id(a, b)][Get_Id(n, n) + 1] = 1;
  for (int i = 1; i <= n; i++) scanf("%lf", &p[i]);
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) {
      if (i == j)
        A[Get_Id(i, j)][Get_Id(i, j)] = 1;
      else
        A[Get_Id(i, j)][Get_Id(i, j)] = 1 - p[i] * p[j];
      for (int k = 1; k <= n; k++) {
        if (Map[i][k] && j != k)
          A[Get_Id(i, j)][Get_Id(k, j)] = -(1.0 - p[k]) * (1 / deg[k]) * p[j];
        if (Map[k][j] && i != k)
          A[Get_Id(i, j)][Get_Id(i, k)] = -(1.0 - p[k]) * (1 / deg[k]) * p[i];
        if (Map[i][k]) {
          for (int l = 1; l <= n; l++) {
            if (Map[j][l] && k != l)
              A[Get_Id(i, j)][Get_Id(k, l)] =
                  -(1.0 - p[k]) * (1.0 - p[l]) * (1 / deg[k]) * (1 / deg[l]);
          }
        }
      }
    }
  }
  Gauss();
  for (int i = 1; i <= n; i++) printf("%.9f ", ans[Get_Id(i, i)]);
  return 0;
}
