#include #include #include #include

using namespace std;

const double eps = 1e-11; const int maxa = 23; const int maxn = 409;

int n, m, t, pa, pb, mp[maxa][maxa], deg[maxn]; double p[maxa], a[maxn][maxn], s[maxn];

inline double transPsb(int a, int b) { if (a == b) return p[a]; else if (!mp[a][b]) return 0; else return (1.0 - p[a]) / deg[a]; }

void guess() { for (int i = 0; i < t; ++ i) { int z; for (z = i; fabs(a[z][i]) < eps; ++ z); if (z > i) for (int k = i; k <= t; ++ k) swap(a[i][k], a[z][k]); for (int j = i + 1; j < t; ++ j) { double rat(a[j][i] / a[i][i]); for (int k = i; k <= t; ++ k) a[j][k] -= a[i][k] * rat; } } for (int i = t - 1; i >= 0; – i) { s[i] = - a[i][t]; for (int j = t - 1; j > i; – j) s[i] -= s[j] * a[i][j]; s[i] /= a[i][i]; } }

int main() { #ifndef ONLINE_JUDGE freopen(".in", “r”, stdin); #endif

scanf("%d%d%d%d", &n, &m, &pa, &pb);
-- pa, -- pb;
t = n * n;
memset(mp, 0, sizeof(mp));
memset(deg, 0, sizeof(deg));
while (m --) {
	int u, v;
	scanf("%d%d", &u, &v);
	++ deg[-- u], ++ deg[-- v];
	mp[u][v] = mp[v][u] = 1;
}
for (int i = 0; i < n; ++ i)
	scanf("%lf", p + i);
for (int i = 0; i < n; ++ i)
	for (int j = 0; j < n; ++ j) {
		int pi(i * n + j);
		for (int k = 0; k < n; ++ k)
			for (int l = 0; l < n; ++ l) {
				int pj(k * n + l);
				if (k != l)
					a[pi][pj] = transPsb(k, i) * transPsb(l, j);
				else
					a[pi][pj] = 0;
			}
		if (i == pa && j == pb)
			a[pi][t] = 1.0;
		else
			a[pi][t] = 0;
		a[pi][pi] -= 1.0;
	}
guess();
for (int i = 0; i < n; ++ i)
	printf("%.6lf ", s[n * i + i]);
putchar(10);

}