#include <bits/stdc++.h>
using namespace std;
const long double EPS = 1E-9;
long double a[490][490], inv_a[490][490], pr[25][25], res[25];
int n, m, p1, p2, g[25][25], N;
long double p[25];
bool inverse() {
  for (int i = 0; i < (int)N; i++) {
    int posx = i, posy = i;
    for (int j = (int)i; j < (int)N; j++)
      for (int k = (int)i; k < (int)N; k++)
        if (abs(a[j][i]) > abs(a[posx][posy])) {
          posx = j;
          posy = k;
        }
    if (posx == -1) return 0;
    for (int k = 0; k < (int)N; k++) {
      swap(a[i][k], a[posx][k]);
      swap(inv_a[i][k], inv_a[posx][k]);
    }
    for (int j = 0; j < (int)N; j++) {
      swap(a[j][i], a[j][posy]);
      swap(inv_a[j][i], inv_a[j][posy]);
    }
    long double c = a[i][i];
    for (int k = 0; k < (int)N; k++) {
      a[i][k] /= c;
      inv_a[i][k] /= c;
    }
    for (int j = (int)i + 1; j < (int)N; j++) {
      long double c = a[j][i];
      for (int k = 0; k < (int)N; k++) {
        a[j][k] -= a[i][k] * c;
        inv_a[j][k] -= inv_a[i][k] * c;
      }
    }
  }
  for (int i = (int)N - 1; i >= 0; i--) {
    for (int j = 0; j < (int)i; j++) {
      long double c = a[j][i];
      for (int k = 0; k < (int)N; k++) {
        a[j][k] -= a[i][k] * c;
        inv_a[j][k] -= inv_a[i][k] * c;
      }
    }
  }
  return 1;
}
long double c[500][500], tmp[500][500];
void mult() {
  for (int i = 0; i < (int)N; i++)
    for (int j = 0; j < (int)N; j++)
      for (int k = 0; k < (int)N; k++) c[i][j] += tmp[i][k] * inv_a[k][j];
}
int main() {
  cout.precision(10);
  cout.setf(ios::fixed);
  cin >> n >> m >> p1 >> p2;
  N = n * n;
  p1--;
  p2--;
  if (p1 == p2) {
    for (int i = 0; i < (int)n; i++) {
      if (i == p1)
        cout << 1.0;
      else
        cout << 0.0;
      cout << ' ';
    }
    return 0;
  }
  for (int i = 0; i < (int)m; i++) {
    int v1, v2;
    cin >> v1 >> v2;
    v1--;
    v2--;
    g[v1][v2] = g[v2][v1] = 1;
  }
  for (int i = 0; i < (int)n; i++) cin >> p[i];
  for (int i = 0; i < (int)n; i++) {
    pr[i][i] = p[i];
    int cnt = 0;
    for (int j = 0; j < (int)n; j++) cnt += g[i][j];
    for (int j = 0; j < (int)n; j++)
      if (i != j && g[i][j]) pr[i][j] = (1 - p[i]) / cnt;
  }
  for (int i = 0; i < (int)n; i++)
    for (int j = 0; j < (int)n; j++)
      for (int ii = 0; ii < (int)n; ii++)
        for (int jj = 0; jj < (int)n; jj++)
          a[i * n + j][ii * n + jj] = i == j ? 0 : pr[i][ii] * pr[j][jj];
  for (int i = 0; i < (int)N; i++)
    for (int j = 0; j < (int)N; j++) {
      a[i][j] = -a[i][j];
      if (i == j) a[i][j] += 1;
    }
  for (int i = 0; i < (int)N; i++)
    for (int j = 0; j < (int)N; j++) tmp[i][j] = a[i][j];
  for (int i = 0; i < (int)N; i++) inv_a[i][i] = 1;
  inverse();
  mult();
  for (int i = 0; i < (int)N; i++)
    for (int j = 0; j < (int)N; j++) {
      if (i == j && abs(c[i][j] - 1) > EPS) cout << "FUCK";
    }
  for (int i = 0; i < (int)n; i++) cout << inv_a[p1 * n + p2][i * n + i] << ' ';
}
