#include <algorithm>
#include <array>
#include <cassert>
#include <chrono>
#include <cmath>
#include <cstring>
#include <functional>
#include <iomanip>
#include <iostream>
#include <map>
#include <numeric>
#include <queue>
#include <random>
#include <set>
#include <vector>
using namespace std;
// http://w...content-available-to-author-only...d.org/jtc1/sc22/wg21/docs/papers/2016/p0200r0.html
template <class Fun>
class y_combinator_result
{
Fun fun_;
public:
template <class T>
explicit y_combinator_result(T &&fun) : fun_(std::forward<T>(fun)) {}
template <class... Args>
decltype(auto) operator()(Args &&...args) { return fun_(std::ref(*this), std::forward<Args>(args)...); }
};
template <class Fun>
decltype(auto) y_combinator(Fun &&fun) { return y_combinator_result<std::decay_t<Fun>>(std::forward<Fun>(fun)); }
template <typename A, typename B>
ostream &operator<<(ostream &os, const pair<A, B> &p) { return os << '(' << p.first << ", " << p.second << ')'; }
template <typename T_container, typename T = typename enable_if<!is_same<T_container, string>::value, typename T_container::value_type>::type>
ostream &operator<<(ostream &os, const T_container &v)
{
os << '{';
string sep;
for (const T &x : v)
os << sep << x, sep = ", ";
return os << '}';
}
void dbg_out() { cerr << endl; }
template <typename Head, typename... Tail>
void dbg_out(Head H, Tail... T)
{
cerr << ' ' << H;
dbg_out(T...);
}
#ifdef NEAL_DEBUG
#define dbg(...) cerr << "(" << #__VA_ARGS__ << "):", dbg_out(__VA_ARGS__)
#else
#define dbg(...)
#endif
const int DIRS = 4;
const int DR[DIRS] = {-1, 0, +1, 0};
const int DC[DIRS] = {0, +1, 0, -1};
struct state
{
int height, r, c;
bool operator<(const state &other) const
{
return height < other.height;
}
};
void run_case(int test_case)
{
int R, K;
cin >> R >> K;
vector<vector<int>> grid(R, vector<int>(R));
for (auto &row : grid)
for (auto &x : row)
cin >> x;
priority_queue<state> pq;
for (int r = 0; r < R; r++)
for (int c = 0; c < R; c++)
pq.push(state({grid[r][c], r, c}));
int64_t total = 0;
auto pq_check = [&](int r, int c, int height) {
if (height > grid[r][c] and height - grid[r][c]>K)
{
total += height - grid[r][c]-K;
grid[r][c] += height - grid[r][c]-K;
pq.push(state({grid[r][c], r, c}));
}
};
while (!pq.empty())
{
state top = pq.top();
pq.pop();
int r = top.r, c = top.c;
for (int dir = 0; dir < DIRS; dir++)
{
int nr = r + DR[dir];
int nc = c + DC[dir];
if (0 <= nr && nr < R && 0 <= nc && nc < R)
pq_check(nr, nc, top.height);
}
}
for(int i=0;i<R;i++){
for(int j=0;j<R;j++){
cout<<grid[i][j]<<" ";
}cout<<'\n';
}
cout << "Case #" << test_case << ": " << total << '\n';
}
int main()
{
int tests=1;
// cin >> tests;
for (int tc = 1; tc <= tests; tc++)
{
run_case(tc);
cout << flush;
}
}
I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGFycmF5PgojaW5jbHVkZSA8Y2Fzc2VydD4KI2luY2x1ZGUgPGNocm9ubz4KI2luY2x1ZGUgPGNtYXRoPgojaW5jbHVkZSA8Y3N0cmluZz4KI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiNpbmNsdWRlIDxpb21hbmlwPgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxtYXA+CiNpbmNsdWRlIDxudW1lcmljPgojaW5jbHVkZSA8cXVldWU+CiNpbmNsdWRlIDxyYW5kb20+CiNpbmNsdWRlIDxzZXQ+CiNpbmNsdWRlIDx2ZWN0b3I+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgovLyBodHRwOi8vdy4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4uZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9wYXBlcnMvMjAxNi9wMDIwMHIwLmh0bWwKdGVtcGxhdGUgPGNsYXNzIEZ1bj4KY2xhc3MgeV9jb21iaW5hdG9yX3Jlc3VsdAp7CiAgICBGdW4gZnVuXzsKCnB1YmxpYzoKICAgIHRlbXBsYXRlIDxjbGFzcyBUPgogICAgZXhwbGljaXQgeV9jb21iaW5hdG9yX3Jlc3VsdChUICYmZnVuKSA6IGZ1bl8oc3RkOjpmb3J3YXJkPFQ+KGZ1bikpIHt9CiAgICB0ZW1wbGF0ZSA8Y2xhc3MuLi4gQXJncz4KICAgIGRlY2x0eXBlKGF1dG8pIG9wZXJhdG9yKCkoQXJncyAmJi4uLmFyZ3MpIHsgcmV0dXJuIGZ1bl8oc3RkOjpyZWYoKnRoaXMpLCBzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOyB9Cn07CnRlbXBsYXRlIDxjbGFzcyBGdW4+CmRlY2x0eXBlKGF1dG8pIHlfY29tYmluYXRvcihGdW4gJiZmdW4pIHsgcmV0dXJuIHlfY29tYmluYXRvcl9yZXN1bHQ8c3RkOjpkZWNheV90PEZ1bj4+KHN0ZDo6Zm9yd2FyZDxGdW4+KGZ1bikpOyB9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgQSwgdHlwZW5hbWUgQj4Kb3N0cmVhbSAmb3BlcmF0b3I8PChvc3RyZWFtICZvcywgY29uc3QgcGFpcjxBLCBCPiAmcCkgeyByZXR1cm4gb3MgPDwgJygnIDw8IHAuZmlyc3QgPDwgIiwgIiA8PCBwLnNlY29uZCA8PCAnKSc7IH0KdGVtcGxhdGUgPHR5cGVuYW1lIFRfY29udGFpbmVyLCB0eXBlbmFtZSBUID0gdHlwZW5hbWUgZW5hYmxlX2lmPCFpc19zYW1lPFRfY29udGFpbmVyLCBzdHJpbmc+Ojp2YWx1ZSwgdHlwZW5hbWUgVF9jb250YWluZXI6OnZhbHVlX3R5cGU+Ojp0eXBlPgpvc3RyZWFtICZvcGVyYXRvcjw8KG9zdHJlYW0gJm9zLCBjb25zdCBUX2NvbnRhaW5lciAmdikKewogICAgb3MgPDwgJ3snOwogICAgc3RyaW5nIHNlcDsKICAgIGZvciAoY29uc3QgVCAmeCA6IHYpCiAgICAgICAgb3MgPDwgc2VwIDw8IHgsIHNlcCA9ICIsICI7CiAgICByZXR1cm4gb3MgPDwgJ30nOwp9Cgp2b2lkIGRiZ19vdXQoKSB7IGNlcnIgPDwgZW5kbDsgfQp0ZW1wbGF0ZSA8dHlwZW5hbWUgSGVhZCwgdHlwZW5hbWUuLi4gVGFpbD4Kdm9pZCBkYmdfb3V0KEhlYWQgSCwgVGFpbC4uLiBUKQp7CiAgICBjZXJyIDw8ICcgJyA8PCBIOwogICAgZGJnX291dChULi4uKTsKfQojaWZkZWYgTkVBTF9ERUJVRwojZGVmaW5lIGRiZyguLi4pIGNlcnIgPDwgIigiIDw8ICNfX1ZBX0FSR1NfXyA8PCAiKToiLCBkYmdfb3V0KF9fVkFfQVJHU19fKQojZWxzZQojZGVmaW5lIGRiZyguLi4pCiNlbmRpZgoKY29uc3QgaW50IERJUlMgPSA0Owpjb25zdCBpbnQgRFJbRElSU10gPSB7LTEsIDAsICsxLCAwfTsKY29uc3QgaW50IERDW0RJUlNdID0gezAsICsxLCAwLCAtMX07CgpzdHJ1Y3Qgc3RhdGUKewogICAgaW50IGhlaWdodCwgciwgYzsKCiAgICBib29sIG9wZXJhdG9yPChjb25zdCBzdGF0ZSAmb3RoZXIpIGNvbnN0CiAgICB7CiAgICAgICAgcmV0dXJuIGhlaWdodCA8IG90aGVyLmhlaWdodDsKICAgIH0KfTsKCnZvaWQgcnVuX2Nhc2UoaW50IHRlc3RfY2FzZSkKewogICAgaW50IFIsIEs7CiAgICBjaW4gPj4gUiA+PiBLOwogICAgdmVjdG9yPHZlY3RvcjxpbnQ+PiBncmlkKFIsIHZlY3RvcjxpbnQ+KFIpKTsKCiAgICBmb3IgKGF1dG8gJnJvdyA6IGdyaWQpCiAgICAgICAgZm9yIChhdXRvICZ4IDogcm93KQogICAgICAgICAgICBjaW4gPj4geDsKCiAgICBwcmlvcml0eV9xdWV1ZTxzdGF0ZT4gcHE7CgogICAgZm9yIChpbnQgciA9IDA7IHIgPCBSOyByKyspCiAgICAgICAgZm9yIChpbnQgYyA9IDA7IGMgPCBSOyBjKyspCiAgICAgICAgICAgIHBxLnB1c2goc3RhdGUoe2dyaWRbcl1bY10sIHIsIGN9KSk7CgogICAgaW50NjRfdCB0b3RhbCA9IDA7CgogICAgYXV0byBwcV9jaGVjayA9IFsmXShpbnQgciwgaW50IGMsIGludCBoZWlnaHQpIHsKICAgICAgICBpZiAoaGVpZ2h0ID4gZ3JpZFtyXVtjXSBhbmQgIGhlaWdodCAtIGdyaWRbcl1bY10+SykKICAgICAgICB7CiAgICAgICAgICAgIHRvdGFsICs9IGhlaWdodCAtIGdyaWRbcl1bY10tSzsKICAgICAgICAgICAgZ3JpZFtyXVtjXSArPSAgaGVpZ2h0IC0gZ3JpZFtyXVtjXS1LOwogICAgICAgICAgICBwcS5wdXNoKHN0YXRlKHtncmlkW3JdW2NdLCByLCBjfSkpOwogICAgICAgIH0KICAgIH07CgogICAgd2hpbGUgKCFwcS5lbXB0eSgpKQogICAgewogICAgICAgIHN0YXRlIHRvcCA9IHBxLnRvcCgpOwogICAgICAgIHBxLnBvcCgpOwogICAgICAgIGludCByID0gdG9wLnIsIGMgPSB0b3AuYzsKCiAgICAgICAgZm9yIChpbnQgZGlyID0gMDsgZGlyIDwgRElSUzsgZGlyKyspCiAgICAgICAgewogICAgICAgICAgICBpbnQgbnIgPSByICsgRFJbZGlyXTsKICAgICAgICAgICAgaW50IG5jID0gYyArIERDW2Rpcl07CgogICAgICAgICAgICBpZiAoMCA8PSBuciAmJiBuciA8IFIgJiYgMCA8PSBuYyAmJiBuYyA8IFIpCiAgICAgICAgICAgICAgICBwcV9jaGVjayhuciwgbmMsIHRvcC5oZWlnaHQpOwogICAgICAgIH0KICAgIH0KICAgIGZvcihpbnQgaT0wO2k8UjtpKyspewogICAgICAgIGZvcihpbnQgaj0wO2o8UjtqKyspewogICAgICAgICAgICBjb3V0PDxncmlkW2ldW2pdPDwiICI7CiAgICAgICAgfWNvdXQ8PCdcbic7CiAgICB9CiAgICBjb3V0IDw8ICJDYXNlICMiIDw8IHRlc3RfY2FzZSA8PCAiOiAiIDw8IHRvdGFsIDw8ICdcbic7Cn0KCmludCBtYWluKCkKewogICAgaW50IHRlc3RzPTE7CiAgICAvLyBjaW4gPj4gdGVzdHM7CgogICAgZm9yIChpbnQgdGMgPSAxOyB0YyA8PSB0ZXN0czsgdGMrKykKICAgIHsKICAgICAgICBydW5fY2FzZSh0Yyk7CiAgICAgICAgY291dCA8PCBmbHVzaDsKICAgIH0KfQo=