func_code_string: #include <bits/stdc++.h>   using namespace std;   long long int n, m, p;   long long int a[2105][2105];   long long int sz[2105 * 2105];   long long int fa[2105 * 2105];   pair<long long int, pair<long long int, long long int> > arr[2105 * 2105];   const int mv[4][2] = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};   long long int find(long long int x) {     return fa[x] == x ? x : fa[x] = find(fa[x]);   }   void merge(long long int a, long long int b) {     a = find(a);     b = find(b);     if (a != b) {       sz[a] += sz[b];       sz[b] = 0;       fa[b] = a;     }   }   long long int out[2105][2105];   long long int height, freq;   void dfs(long long int x, long long int y) {     if (x < 0 || x >= n || y < 0 || y >= m) return;     if (out[x][y]) return;     if (a[x][y] < height) return;     if (!freq) return;     out[x][y] = height;     freq--;     dfs(x + 1, y);     dfs(x - 1, y);     dfs(x, y + 1);     dfs(x, y - 1);     return;   }   int main() {     ios_base::sync_with_stdio(0);     long long int i, j, k;     cin >> n >> m >> p;     for (i = 0; i < (n); ++i)       for (j = 0; j < (m); ++j) {         cin >> a[i][j];         arr[i * m + j] = pair<long long int, pair<long long int, long long int> >(             a[i][j], pair<long long int, long long int>(i, j));       }     for (i = 0; i < (n * m); ++i) {       fa[i] = i;       sz[i] = 1;     }     sort(arr, arr + n * m);     reverse(arr, arr + n * m);     long long int ans = -1;     i = 0;     while (i < n * m) {       j = i;       while (j < n * m && arr[j].first == arr[i].first) {         long long int x0, x, y0, y;         x0 = arr[j].second.first;         y0 = arr[j].second.second;         for (k = 0; k < (4); ++k) {           x = x0 + mv[k][0];           y = y0 + mv[k][1];           if (x >= 0 && x < n && y >= 0 && y < m)             if (a[x][y] >= arr[j].first) merge(x * m + y, x0 * m + y0);         }         j++;       }       if (arr[i].first && (p % arr[i].first) == 0)         for (k = i; k < j; ++k) {           long long int x, y;           x = arr[k].second.first;           y = arr[k].second.second;           if (sz[find(x * m + y)] >= p / arr[i].first) {             ans = x * m + y;             break;           }         }       if (ans != -1) break;       i = j;     }     if (ans == -1) {       cout <<  NO n ;       return 0;     }     cout <<  YES n ;     height = a[ans / m][ans % m];     freq = p / height;     dfs(ans / m, ans % m);     for (i = 0; i < (n); ++i) {       for (j = 0; j < (m); ++j) cout << out[i][j] <<    ;       cout << endl;     }     return 0;   }   