#include #include using uint = uint32_t; constexpr size_t BUF_SIZE = 1 << 20; char buf[BUF_SIZE]; char *p = buf; char *e = buf; inline char gc() { if (p == e) { p = buf; e = buf + fread(buf, 1, BUF_SIZE, stdin); } return *p++; } inline uint read_uint() { uint x = 0; char c = gc(); // 空白はすべて '0' より小さい while (c < '0') { c = gc(); } // 入力には数字と空白しかないので c >= '0' だけで十分 while (c >= '0') { x = x * 10 + (c & 15); c = gc(); } return x; } uint S[1000000]; size_t out_pos = 0; inline void pc(char c) { if (out_pos == BUF_SIZE) { fwrite(buf, 1, out_pos, stdout); out_pos = 0; } buf[out_pos++] = c; } inline void write_uint(uint x) { char s[10]; uint n = 0; do { uint q = x / 10; s[n++] = static_cast('0' + (x - q * 10)); x = q; } while (x); while (n) { pc(s[--n]); } pc('\n'); } int main() { uint H = read_uint(); uint W = read_uint(); uint T = 0; for (uint i = 0; i < H; ++i) { uint s = 0; for (uint j = 0; j < W; ++j) { s += read_uint(); } S[i] = s; T += s; } // 入力を全部読み終わったので buf を出力用に再利用 for (uint i = 0; i < H; ++i) { write_uint(S[i] + T); } fwrite(buf, 1, out_pos, stdout); }