#include <bits/stdc++.h>
using namespace std;
double g[500][500], p[30], c[500][500];
vector<int> a[500];
int n, m, A, B;
void work() {
  memset(c, 0, sizeof(c));
  for (int i = 0; i < n * n; i++)
    for (int j = 0; j < n * n; j++)
      if (g[i][j] > 1e-8)
        for (int k = 0; k < n * n; k++) c[i][k] += g[i][j] * g[j][k];
  for (int i = 0; i < n * n; i++)
    for (int j = 0; j < n * n; j++) g[i][j] = c[i][j];
  return;
}
int main() {
  cin >> n >> m >> A >> B;
  for (int i = 1; i <= m; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    x--;
    y--;
    a[x].push_back(y);
    a[y].push_back(x);
  }
  memset(g, 0, sizeof(g));
  for (int i = 0; i < n; i++) cin >> p[i];
  for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++) {
      int x = i * n + j;
      if (i == j) {
        g[x][x] = 1;
        continue;
      }
      double buf = 1 - p[i] * p[j];
      int si = a[i].size(), sj = a[j].size();
      double P = (1 - p[i]) / si * p[j];
      P /= buf;
      for (int k = 0; k < a[i].size(); k++) {
        int y = a[i][k] * n + j;
        g[y][x] = P;
      }
      P = (1 - p[j]) / sj * p[i];
      P /= buf;
      for (int k = 0; k < a[j].size(); k++) {
        int y = i * n + a[j][k];
        g[y][x] = P;
      }
      P = ((1 - p[i]) / si) * ((1 - p[j]) / sj);
      P /= buf;
      for (int k = 0; k < a[i].size(); k++)
        for (int l = 0; l < a[j].size(); l++) {
          int y = a[i][k] * n + a[j][l];
          g[y][x] = P;
        }
    }
  for (int i = 1; i <= 20; i++) work();
  A--;
  B--;
  int buf = A * n + B;
  for (int i = 0; i < n; i++) printf("%.7f ", g[i * n + i][buf]);
  return 0;
}
