#include <bits/stdc++.h>
using namespace std;
const int MAXN = 30;
const int MAXM = MAXN * MAXN;
const double EPS = 1e-8;
int _w;
int dcmp(double x) { return fabs(x) < EPS ? 0 : (x < 0 ? -1 : 1); }
int n, m, a, b;
vector<int> g[MAXN];
double p[MAXN];
int id[MAXN][MAXN], totid;
double A[MAXM][MAXM];
void prelude() {
  for (int i = 1; i <= n; ++i)
    for (int j = 1; j <= n; ++j) id[i][j] = totid++;
  for (int i = 1; i <= n; ++i)
    for (int j = 1; j <= n; ++j) {
      if (i == j) {
        int u = id[i][j];
        A[u][u] = -1;
        continue;
      }
      int u = id[i][j];
      for (vector<int>::iterator iit = g[i].begin(); iit != g[i].end(); ++iit)
        for (vector<int>::iterator jit = g[j].begin(); jit != g[j].end();
             ++jit) {
          int v = id[*iit][*jit];
          double pp = (1 - p[i]) / (double)g[i].size();
          pp *= (1 - p[j]) / (double)g[j].size();
          A[v][u] = pp;
        }
      for (vector<int>::iterator iit = g[i].begin(); iit != g[i].end(); ++iit) {
        int v = id[*iit][j];
        double pp = (1 - p[i]) / (double)g[i].size();
        pp *= p[j];
        A[v][u] = pp;
      }
      for (vector<int>::iterator jit = g[j].begin(); jit != g[j].end(); ++jit) {
        int v = id[i][*jit];
        double pp = (1 - p[j]) / (double)g[j].size();
        pp *= p[i];
        A[v][u] = pp;
      }
      A[u][u] = p[i] * p[j] - 1;
    }
  int s = id[a][b];
  A[s][totid] = -1;
}
void solve(int n) {
  for (int j = 0; j < n; ++j) {
    if (!dcmp(A[j][j])) {
      for (int i = j + 1; i < n; ++i)
        if (dcmp(A[i][j])) {
          for (int k = j; k <= n; ++k) swap(A[i][k], A[j][k]);
          break;
        }
    }
    for (int i = 0; i < n; ++i)
      if (i != j) {
        double p = A[i][j] / A[j][j];
        for (int k = j; k <= n; ++k) A[i][k] -= A[j][k] * p;
      }
  }
}
int main() {
  _w = scanf("%d%d%d%d", &n, &m, &a, &b);
  for (int i = 0; i < m; ++i) {
    int u, v;
    _w = scanf("%d%d", &u, &v);
    g[u].push_back(v);
    g[v].push_back(u);
  }
  for (int i = 1; i <= n; ++i) _w = scanf("%lf", p + i);
  prelude(), solve(totid);
  for (int i = 1; i <= n; ++i) {
    int u = id[i][i];
    printf("%.8lf ", A[u][totid] / A[u][u]);
  }
  puts("");
  return 0;
}
