use std::io::{Read, Write, BufWriter}; fn main() { // 1. 高速入力のために標準入力をすべてバイト配列としてメモリに読み込む let mut stdin = std::io::stdin(); let mut buf = Vec::new(); stdin.read_to_end(&mut buf).unwrap(); let mut pos = 0; // バイト配列から u32 の数値をパースするクロージャ let mut next_u32 = || -> u32 { // 空白や改行をスキップ while pos < buf.len() && buf[pos] <= b' ' { pos += 1; } if pos >= buf.len() { return 0; } let mut res = 0u32; // 数字である間読み込み続ける while pos < buf.len() && buf[pos] > b' ' { // res = res * 10 + (byte - '0') res = res.wrapping_mul(10).wrapping_add((buf[pos] - b'0') as u32); pos += 1; } res }; // H と W の取得 let h = next_u32() as usize; let w = next_u32() as usize; // 各行のチェックサム S_i を保存する配列 let mut s = vec![0u32; h]; // 全体のチェックサム T let mut t = 0u32; // 各行の読み込みと S_i, T の計算 for i in 0..h { let mut sum = 0u32; for _ in 0..w { let a = next_u32(); // wrapping_add で自動的に mod 2^32 の計算を行う sum = sum.wrapping_add(a); } s[i] = sum; t = t.wrapping_add(sum); } // 2. 高速出力のために BufWriter を使用 let stdout = std::io::stdout(); let mut out = BufWriter::new(stdout.lock()); // 各行の C_i を計算して出力 for i in 0..h { let c = s[i].wrapping_add(t); writeln!(out, "{}", c).unwrap(); } }