import numpy as np
# 入力
n = int(input())
s = int(input())
# 1. 乱数の種
np.random.seed(s)
# 2. n 次正方行列 A の生成(対角優位に修正)
A = np.random.randint(0, 2, (n, n)).astype(float)
for i in range(n):
A[i, i] += np.sum(A[i])
# 3. n 次元ベクトル b の生成
b = np.random.randint(0, 2, n).astype(float)
# 4. Jacobi 法
x = np.zeros(n)
for _ in range(100):
x_new = np.zeros(n)
for i in range(n):
s = b[i] - np.dot(A[i, :], x) + A[i, i] * x[i]
x_new[i] = s / A[i, i]
# 収束判定
if np.linalg.norm(np.dot(A, x_new) - b) < 1e-6:
x = x_new
break
x = x_new
# 結果をスペース区切りで出力
print(*x)
aW1wb3J0IG51bXB5IGFzIG5wCgojIOWFpeWKmwpuID0gaW50KGlucHV0KCkpCnMgPSBpbnQoaW5wdXQoKSkKCiMgMS4g5Lmx5pWw44Gu56iuCm5wLnJhbmRvbS5zZWVkKHMpCgojIDIuIG4g5qyh5q2j5pa56KGM5YiXIEEg44Gu55Sf5oiQ77yI5a++6KeS5YSq5L2N44Gr5L+u5q2j77yJCkEgPSBucC5yYW5kb20ucmFuZGludCgwLCAyLCAobiwgbikpLmFzdHlwZShmbG9hdCkKZm9yIGkgaW4gcmFuZ2Uobik6CiAgICBBW2ksIGldICs9IG5wLnN1bShBW2ldKQoKIyAzLiBuIOasoeWFg+ODmeOCr+ODiOODqyBiIOOBrueUn+aIkApiID0gbnAucmFuZG9tLnJhbmRpbnQoMCwgMiwgbikuYXN0eXBlKGZsb2F0KQoKIyA0LiBKYWNvYmkg5rOVCnggPSBucC56ZXJvcyhuKQpmb3IgXyBpbiByYW5nZSgxMDApOgogICAgeF9uZXcgPSBucC56ZXJvcyhuKQogICAgZm9yIGkgaW4gcmFuZ2Uobik6CiAgICAgICAgcyA9IGJbaV0gLSBucC5kb3QoQVtpLCA6XSwgeCkgKyBBW2ksIGldICogeFtpXQogICAgICAgIHhfbmV3W2ldID0gcyAvIEFbaSwgaV0KCiAgICAjIOWPjuadn+WIpOWumgogICAgaWYgbnAubGluYWxnLm5vcm0obnAuZG90KEEsIHhfbmV3KSAtIGIpIDwgMWUtNjoKICAgICAgICB4ID0geF9uZXcKICAgICAgICBicmVhawogICAgeCA9IHhfbmV3CgojIOe1kOaenOOCkuOCueODmuODvOOCueWMuuWIh+OCiuOBp+WHuuWKmwpwcmludCgqeCkK