import sys import pypyjit from __pypy__ import builders pypyjit.set_param( threshold=200, function_threshold=50, trace_eagerness=2, ) MASK = 0xFFFFFFFF # A_ij <= 10^9 なので最大10桁。 # ループを完全に消している。 def read_num(d, p): x = d[p] - 48 p += 1 c = d[p] p += 1 if c < 48: return x, p x = x * 10 + c - 48 c = d[p] p += 1 if c < 48: return x, p x = x * 10 + c - 48 c = d[p] p += 1 if c < 48: return x, p x = x * 10 + c - 48 c = d[p] p += 1 if c < 48: return x, p x = x * 10 + c - 48 c = d[p] p += 1 if c < 48: return x, p x = x * 10 + c - 48 c = d[p] p += 1 if c < 48: return x, p x = x * 10 + c - 48 c = d[p] p += 1 if c < 48: return x, p x = x * 10 + c - 48 c = d[p] p += 1 if c < 48: return x, p x = x * 10 + c - 48 c = d[p] p += 1 if c < 48: return x, p # 10桁目 x = x * 10 + c - 48 # 次は必ず区切り p += 1 return x, p def main(): data = sys.stdin.buffer.read() p = 0 # H H = 0 while True: c = data[p] p += 1 if c < 48: break H = H * 10 + c - 48 # W W = 0 while True: c = data[p] p += 1 if c < 48: break W = W * 10 + c - 48 # 最後に改行がない場合のみ sentinel if data[-1] >= 48: data += b'\n' rn = read_num # -------------------------------------------------- # H == 1 # # 最も横長なケース。 # S1 = T なので答えは 2*T mod 2^32。 # S 配列も行管理も完全に不要。 # -------------------------------------------------- if H == 1: total = 0 j = 0 while j < W: x, p = rn(data, p) total += x j += 1 sys.stdout.write(str((total << 1) & MASK)) return S = [0] * H total = 0 r = 0 # -------------------------------------------------- # W == 1 # -------------------------------------------------- if W == 1: while r < H: x, p = rn(data, p) S[r] = x total += x r += 1 # -------------------------------------------------- # W == 2 # # inner loop を完全に除去 # -------------------------------------------------- elif W == 2: while r < H: a, p = rn(data, p) b, p = rn(data, p) row = a + b S[r] = row total += row r += 1 # -------------------------------------------------- # W == 3 # -------------------------------------------------- elif W == 3: while r < H: a, p = rn(data, p) b, p = rn(data, p) c, p = rn(data, p) row = a + b + c S[r] = row total += row r += 1 # -------------------------------------------------- # W == 4 # -------------------------------------------------- elif W == 4: while r < H: a, p = rn(data, p) b, p = rn(data, p) c, p = rn(data, p) d, p = rn(data, p) row = a + b + c + d S[r] = row total += row r += 1 # -------------------------------------------------- # 一般ケース # -------------------------------------------------- else: while r < H: row = 0 j = 0 while j < W: x, p = rn(data, p) row += x j += 1 S[r] = row total += row r += 1 T = total & MASK # ここは現在最速の方式から変更しない out = builders.StringBuilder(H * 4) append = out.append for s in S: append(str((s + T) & MASK)) append('\n') sys.stdout.write(out.build()) main()