#include <bits/stdc++.h>
using namespace std;
int n, m, a, b, sz, deg[25];
bool mp[25][25];
double p[25], A[500][550], d[500];
void gauss() {
  for (int i = 1; i <= n * n; i++) {
    int r = i;
    for (int j = i + 1; j <= n * n; j++)
      if (fabs(A[r][i]) < fabs(A[j][i])) r = j;
    if (fabs(A[r][i]) < 1e-12) continue;
    std::swap(A[r], A[i]);
    for (int j = i + 1; j <= n * n; j++) {
      double tmp = -A[j][i] / A[i][i];
      for (int k = i; k <= n * n + n; k++) A[j][k] += tmp * A[i][k];
    }
  }
}
double get_ans(int w) {
  memset(d, 0, sizeof(d));
  for (int i = n * n; i >= 1; i--) {
    d[i] = A[i][n * n + w];
    for (int j = i + 1; j <= n * n; j++) d[i] -= A[i][j] * d[j];
    d[i] /= A[i][i];
  }
  return d[((a - 1) * n + b)];
}
int main() {
  scanf("%d%d%d%d", &n, &m, &a, &b);
  for (int i = 1; i <= m; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    mp[x][y] = mp[y][x] = 1;
    deg[x]++;
    deg[y]++;
  }
  for (int i = 1; i <= n; i++) scanf("%lf", &p[i]);
  for (int i = 1; i <= n; i++) mp[i][i] = 1;
  for (int t = 1; t <= n; t++)
    for (int i = 1; i <= n; i++)
      for (int j = 1; j <= n; j++)
        if (i == j)
          A[((i - 1) * n + j)][n * n + t] = (i == t),
                                       A[((i - 1) * n + j)][((i - 1) * n + j)] =
                                           1;
        else
          for (int k = 1; k <= n; k++)
            for (int l = 1; l <= n; l++)
              if (mp[i][k] && mp[j][l]) {
                double P = 1;
                if (i == k)
                  P *= p[i];
                else
                  P *= (1 - p[i]) / deg[i];
                if (j == l)
                  P *= p[j];
                else
                  P *= (1 - p[j]) / deg[j];
                if (i == k && j == l) P -= 1;
                A[((i - 1) * n + j)][((k - 1) * n + l)] = P;
              }
  gauss();
  for (int t = 1; t <= n; t++) printf("%.10lf ", get_ans(t));
  return 0;
}
