#include <bits/stdc++.h>
using namespace std;
const int N = 23;
const int inf = 1e9;
const double eps = 1e-8;
int n, m, st, ed, tot, nn;
vector<int> g[N];
double p[N], k[N];
int id[N][N];
typedef double Matrix[N * N][N * N];
double B[N * N][N];
void gauss(Matrix a, int n) {
  for (int i = 0; i <= n - 1; ++i) {
    int rownum = i;
    for (int j = i + 1; j <= n - 1; ++j) {
      if (fabs(a[j][i]) > fabs(a[rownum][i])) rownum = j;
    }
    if (fabs(a[rownum][i]) < eps) continue;
    if (i != rownum) {
      for (int j = 0; j <= n - 1; ++j) swap(a[i][j], a[rownum][j]);
      for (int j = 0; j <= nn - 1; ++j) swap(B[i][j], B[rownum][j]);
    }
    for (int j = i + 1; j <= n - 1; ++j) {
      for (int k = nn - 1; k >= 0; --k) B[j][k] -= a[j][i] / a[i][i] * B[i][k];
      for (int k = n - 1; k >= 0; --k) {
        a[j][k] -= a[j][i] / a[i][i] * a[i][k];
      }
    }
  }
  for (int cur = n - 1; cur >= 0; --cur) {
    for (int i = 0; i <= nn - 1; ++i) {
      for (int j = cur + 1; j <= n - 1; ++j) {
        B[cur][i] -= a[cur][j] * B[j][i];
      }
      B[cur][i] /= a[cur][cur];
    }
  }
}
Matrix A;
int main() {
  scanf("%d%d", &n, &m);
  scanf("%d%d", &st, &ed);
  nn = n;
  for (int i = 1; i <= m; ++i) {
    int u, v;
    scanf("%d%d", &u, &v);
    g[u].push_back(v);
    g[v].push_back(u);
  }
  for (int i = 1; i <= n; ++i) {
    scanf("%lf", &p[i]);
    k[i] = (1.0 - p[i]) / g[i].size();
  }
  for (int i = 1; i <= n; ++i)
    for (int j = 1; j <= n; ++j) id[i][j] = tot++;
  for (int i = 1; i <= n; ++i) {
    B[id[i][i]][i - 1] = 1;
  }
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= n; ++j) {
      int cid = id[i][j];
      if (i == j) {
        A[cid][cid] = 1;
        continue;
      }
      A[cid][cid] = 1 - p[i] * p[j];
      for (int v = 0; v <= (int)g[i].size() - 1; ++v) {
        int nid = id[g[i][v]][j];
        A[cid][nid] = -k[i] * p[j];
      }
      for (int v = 0; v <= (int)g[j].size() - 1; ++v) {
        int nid = id[i][g[j][v]];
        A[cid][nid] = -p[i] * k[j];
      }
      for (int i1 = 0; i1 <= (int)g[i].size() - 1; ++i1) {
        for (int i2 = 0; i2 <= (int)g[j].size() - 1; ++i2) {
          int nid = id[g[i][i1]][g[j][i2]];
          A[cid][nid] = -k[i] * k[j];
        }
      }
    }
  }
  gauss(A, n * n);
  for (int i = 0; i <= nn - 1; ++i) {
    printf("%.7f ", B[id[st][ed]][i]);
  }
  return 0;
}
