#include <bits/stdc++.h>
using namespace std;
vector<pair<int, double> > X, Y;
typedef double TL[309];
typedef TL TM[309];
int la[100], ro[100000], pr[100000], now, du[100];
int n, m, a, b, a1, a2, tot, rec[1100][1100];
double p[100];
void ins(int a, int b) {
  now++;
  pr[now] = la[a];
  la[a] = now;
  ro[now] = b;
}
int index(int a, int b) {
  if (a > b) swap(a, b);
  if (a == b) b = n + 1;
  if (!rec[a][b]) rec[a][b] = ++tot;
  return rec[a][b];
}
TM f, tmp;
double eps = 1e-30;
void mul(TM a, TM b, TM &c) {
  for (int i = 1; i <= tot; i++)
    for (int j = 1; j <= tot; j++) tmp[i][j] = 0;
  for (int i = 1; i <= tot; i++)
    for (int k = 1; k <= tot; k++)
      if (fabs(a[i][k]) > eps)
        for (int j = 1; j <= tot; j++) tmp[i][j] += a[i][k] * b[k][j];
  for (int i = 1; i <= tot; i++)
    for (int j = 1; j <= tot; j++) c[i][j] = tmp[i][j];
}
int main() {
  scanf("%d%d%d%d", &n, &m, &a, &b);
  for (int i = 0; i < m; i++) {
    scanf("%d%d", &a1, &a2);
    ins(a1, a2);
    ins(a2, a1);
    du[a1]++, du[a2]++;
  }
  for (int i = 1; i <= n; i++) cin >> p[i];
  for (int x = 1; x <= n; x++)
    for (int y = 1; y <= n; y++)
      if (x == y)
        index(n + 1, x);
      else
        index(y, x);
  for (int x = 1; x <= n; x++)
    for (int y = x + 1; y <= n; y++)
      if (x != y) {
        X.clear();
        X.push_back(make_pair(x, p[x]));
        for (int t1 = la[x]; t1; t1 = pr[t1])
          X.push_back(make_pair(ro[t1], (1. - p[x]) / du[x]));
        Y.clear();
        Y.push_back(make_pair(y, p[y]));
        for (int t1 = la[y]; t1; t1 = pr[t1])
          Y.push_back(make_pair(ro[t1], (1. - p[y]) / du[y]));
        for (int i = 0; i < X.size(); i++)
          for (int j = 0; j < Y.size(); j++)
            if (X[i].first == Y[j].first)
              f[index(x, y)][index(n + 1, Y[j].first)] +=
                  X[i].second * Y[j].second;
            else
              f[index(x, y)][index(X[i].first, Y[j].first)] +=
                  X[i].second * Y[j].second;
      }
  for (int x = 1; x <= n; x++) f[index(n + 1, x)][index(n + 1, x)] = 1;
  for (int i = 1; i <= 30; i++) mul(f, f, f);
  for (int i = 1; i <= n; i++)
    if (i == n)
      printf("%.10f\n", (double)f[index(a, b)][index(n + 1, i)]);
    else
      printf("%.10f ", (double)f[index(a, b)][index(n + 1, i)]);
}
