#include <bits/stdc++.h>
using namespace std;
const int V = 25;
int n, k, sx, sy;
bool adj[V][V];
double p[V];
double mat[V * V][V * V];
int id[V][V], deg[V];
double calc_p(int i, int j) {
  return (i == j) ? p[i] : (adj[i][j]) ? (1 - p[i]) / deg[i] : 0.0;
}
void gauss(double a[][V * V], int m, int n) {
  for (int i = 0; i < m; i++) {
    int u = i;
    for (int r = i + 1; r < m; r++)
      if (fabs(a[r][i]) > fabs(a[u][i])) u = r;
    if (u != i)
      for (int j = i; j < m + n; j++) swap(a[i][j], a[u][j]);
    double t = a[i][i];
    for (int j = i; j < m + n; j++) a[i][j] /= t;
    for (int c = 0; c < m; c++)
      if (c != i) {
        t = a[c][i];
        for (int j = i; j < m + n; j++) a[c][j] -= t * a[i][j];
      }
  }
}
int main() {
  int a, b;
  scanf("%d%d%d%d", &n, &k, &sx, &sy);
  sx--;
  sy--;
  memset(deg, 0, sizeof(deg));
  memset(adj, 0, sizeof(adj));
  for (int i = 0; i < k; i++) {
    scanf("%d%d", &a, &b);
    a--;
    b--;
    adj[a][b] = adj[b][a] = true;
    deg[a]++;
    deg[b]++;
  }
  int m = 0;
  for (int i = 0; i < n; i++)
    for (int j = i; j < n; j++) id[i][j] = id[j][i] = m++;
  for (int i = 0; i < n; i++) scanf("%lf", &p[i]);
  memset(mat, 0, sizeof(mat));
  for (int i = 0; i < n; i++)
    for (int j = i + 1; j < n; j++) {
      for (int x = 0; x < n; x++)
        for (int y = 0; y < n; y++) {
          mat[id[i][j]][id[x][y]] += calc_p(i, x) * calc_p(j, y);
        }
    }
  for (int i = 0; i < m; i++) mat[i][i] -= 1;
  for (int i = 0; i < n; i++) mat[id[i][i]][id[i][i]] = 1;
  for (int i = 0; i < n; i++) mat[id[i][i]][m + i] = 1;
  gauss(mat, m, n);
  for (int i = 0; i < n; i++) {
    if (i) printf(" ");
    printf("%.9f", mat[id[sx][sy]][m + i]);
  }
  printf("\n");
}
