#include <bits/stdc++.h>
using namespace std;
int n, m, s1, s2;
double p[30][30], a[600][600];
vector<int> v[30];
int main() {
  scanf("%d%d%d%d", &n, &m, &s1, &s2);
  for (int i = 1; i <= m; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    v[x].push_back(y), v[y].push_back(x);
  }
  for (int i = 1; i <= n; i++) {
    scanf("%lf", p[i] + i);
    double d = 1.0 - p[i][i];
    d /= 1.0 * v[i].size();
    for (int j = 0; j < v[i].size(); j++) p[i][v[i][j]] = d;
  }
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) {
      a[i * n + j][i * n + j] -= 1.0;
      if (i == j) continue;
      for (int k = 1; k <= n; k++) {
        for (int l = 1; l <= n; l++)
          a[k * n + l][i * n + j] += p[i][k] * p[j][l];
      }
    }
  }
  a[s1 * n + s2][n * n + n + 1] -= 1.0;
  for (int i = n + 1; i <= n * n + n; i++) {
    int k = i;
    for (int j = i + 1; j <= n * n + n; j++)
      if (abs(a[j][i]) > abs(a[k][i])) k = j;
    for (int j = n + 1; j <= n * n + n + 1; j++) swap(a[i][j], a[k][j]);
    for (int j = i + 1; j <= n * n + n + 1; j++) a[i][j] /= a[i][i];
    for (int j = n + 1; j <= n * n + n; j++) {
      if (i == j) continue;
      for (int k = i + 1; k <= n * n + n + 1; k++) a[j][k] -= a[i][k] * a[j][i];
    }
  }
  for (int i = 1; i < n; i++) printf("%.10lf ", a[i * n + i][n * n + n + 1]);
  printf("%.10lf\n", a[n * n + n][n * n + n + 1]);
  return 0;
}
