#include <bits/stdc++.h>
using namespace std;
template <typename T>
void read(T &x) {
  x = 0;
  T f = 1;
  char ch = getchar();
  while (!isdigit(ch)) {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (isdigit(ch)) {
    x = (x << 3) + (x << 1) + ch - '0';
    ch = getchar();
  }
  x *= f;
}
int read() {
  int x = 0, f = 1;
  char ch = getchar();
  while (!isdigit(ch)) {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (isdigit(ch)) {
    x = (x << 3) + (x << 1) + ch - '0';
    ch = getchar();
  }
  return x * f;
}
template <typename T>
void print(T x) {
  if (x < 0) putchar('-'), x = -x;
  if (x > 9) print(x / 10);
  putchar(x % 10 + '0');
}
template <typename T>
T Abs(T x) {
  return x < 0 ? -x : x;
}
template <typename T>
T Min(T x, T y) {
  return x < y ? x : y;
}
template <typename T>
T Max(T x, T y) {
  return x > y ? x : y;
}
const int N = 1000;
const double EPS = 1e-9;
int n, m, b, c;
int in[N + 5];
double p[N + 5];
int e[N + 5][N + 5];
double a[N + 5][N + 5];
int id(int x, int y) { return (x - 1) * n + y; }
int main() {
  read(n);
  read(m);
  read(b);
  read(c);
  int u, v;
  for (int i = 1; i <= m; ++i) {
    read(u);
    read(v);
    in[u]++;
    in[v]++;
    e[u][v] = e[v][u] = 1;
  }
  for (int i = 1; i <= n; ++i) scanf("%lf", &p[i]);
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= n; ++j) {
      a[id(i, j)][id(i, j)] = 1 - (i == j ? 0 : p[i] * p[j]);
      for (int k = 1; k <= n; ++k)
        if (e[i][k]) {
          for (int o = 1; o <= n; ++o)
            if (e[o][j] && k != o) {
              a[id(i, j)][id(k, o)] -= (1 - p[k]) / in[k] * (1 - p[o]) / in[o];
            }
        }
      for (int k = 1; k <= n; ++k)
        if (e[i][k] && k != j)
          a[id(i, j)][id(k, j)] -= (1 - p[k]) / in[k] * p[j];
      for (int k = 1; k <= n; ++k)
        if (e[j][k] && k != i)
          a[id(i, j)][id(i, k)] -= (1 - p[k]) / in[k] * p[i];
    }
  }
  int tot = n * n;
  a[id(b, c)][tot + 1] = 1;
  for (int i = 1; i <= tot; ++i) {
    int pos = i;
    for (int j = i + 1; j <= tot; ++j)
      if (Abs(a[j][i]) > Abs(a[pos][i])) pos = j;
    if (pos != i) swap(a[pos], a[i]);
    double d = a[i][i];
    for (int j = i; j <= tot + 1; ++j) a[i][j] /= d;
    for (int j = 1; j <= tot; ++j) {
      if (j == i) continue;
      d = a[j][i];
      for (int k = i + 1; k <= tot + 1; ++k) a[j][k] -= d * a[i][k];
    }
  }
  for (int i = 1; i <= n; ++i)
    printf("%.6f ", a[id(i, i)][tot + 1] / a[id(i, i)][id(i, i)]);
  return 0;
}
