#include <bits/stdc++.h>
using namespace std;
const int maxn = 22;
const int maxv = 505;
const double eps = 1e-10;
int adj[maxn][maxn], deg[maxn];
double tran[maxn][maxn];
double p[maxv][maxv];
int n, m, s, a, b;
double ret;
void init() {
  scanf("%d%d%d%d", &n, &m, &a, &b);
  a--;
  b--;
  int u, v;
  s = n * n;
  for (int i = 0; i < m; i++) {
    scanf("%d%d", &u, &v);
    u--;
    v--;
    adj[u][v] = adj[v][u] = 1;
    deg[u]++;
    deg[v]++;
  }
  for (int i = 0; i < n; i++) scanf("%lf", &tran[i][i]);
}
inline double Fabs(double x) { return x < 0 ? -x : x; }
void work() {
  for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++)
      if (adj[i][j]) tran[i][j] = (1 - tran[i][i]) / deg[i];
  for (int i = 0; i < s; i++) {
    int x = i / n, y = i % n;
    p[i][i] -= 1;
    if (x == y) continue;
    for (int u = 0; u < n; u++)
      for (int v = 0; v < n; v++)
        p[((u)*n + (v))][i] += tran[x][u] * tran[y][v];
  }
  p[((a)*n + (b))][s] = -1;
  for (int i = 0; i < s; i++) {
    if (Fabs(p[i][i]) < eps)
      for (int j = i + 1; j < s; j++)
        if (Fabs(p[j][i]) > eps) {
          for (int k = 0; k <= s; k++) {
            double tmp = p[i][k];
            p[i][k] = p[j][k];
            p[j][k] = tmp;
          }
          break;
        }
    double t = p[i][i];
    for (int k = 0; k <= s; k++) p[i][k] /= t;
    for (int j = 0; j < s; j++)
      if (j != i && Fabs(p[j][i]) > eps) {
        t = p[j][i];
        for (int k = 0; k <= s; k++) p[j][k] -= p[i][k] * t;
      }
  }
}
void print() {
  for (int i = 0; i < n; i++) printf("%.10lf ", p[((i)*n + (i))][s]);
  puts("");
}
int main() {
  init();
  work();
  print();
  return 0;
}
