#ifdef LOCAL #include "pch.hpp" #else #include #endif //#define ACL_included #ifdef ACL_included #include using namespace atcoder; #endif # pragma GCC optimize("O3,unroll-loops") # pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,tune=native") using namespace std; using ll = long long; using ull = unsigned long long; using gll = greater; template using vec = vector; template using vvec = vector>; template using uset = unordered_set; template using umap = unordered_map; template using pque = priority_queue; template using rpque = priority_queue,greater>; template using deq = deque; using vll = vec; using vbool = vec; using vstr = vec; using vchar = vec; using vvll = vvec; using vvbool = vvec; using vvstr = vvec; using vvchar = vvec; template using vpair = vec>; using pll = pair; using usll = uset; using umll = umap; using dqll = deq; using pqll = pque; using rpqll = rpque; using qll = queue; using vpll = vpair; #ifdef ACL_included using namespace atcoder; using mint = modint; using vmint = vec; using vvmint = vvec; #endif #define segt segtree #define fwt fenwick_tree #define rep(i,n) for(ll i=0;i<(ll)(n);i++) #define rep1(i,n) for(ll i=1;i<=(ll)(n);i++) #define repab(i,a,b) for(ll i=(ll)(a);i<=(ll)(b);i++) #define rrep(i,a,b) for(ll i=(ll)(a);i>=(ll)(b);i--) #define repv(e,v) for(auto& e: v) #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(), x.rend() #define Yes cout << "Yes" << endl #define No cout << "No" << endl #define YorN(x) if(x){Yes;}else{No;} const ll INF = 1ll<<62; const vll DX = {1,0,-1,0,1,-1,-1,1}; const vll DY = {0,1,0,-1,1,1,-1,-1}; const char spc = ' '; template size_t HashCombine(const size_t seed,const T &v){ return seed^(std::hash()(v)+0x9e3779b9+(seed<<6)+(seed>>2)); } template struct std::hash>{ size_t operator()(const std::pair &keyval) const noexcept { return HashCombine(std::hash()(keyval.first), keyval.second); } }; template bool chmax(T& a, const T& b){ if(a < b){ a = b; return true; } return false; } template bool chmin(T& a, const T& b){ if(a > b){ a = b; return true; } return false; } template inline istream& operator>>(istream& is, vector& v) { rep(i, v.size()) is >> v[i]; return is; } template inline istream& operator>>(istream& is, vector>& v) { rep(i, v.size()) is >> v[i]; return is; } template inline ostream& operator<<(ostream& os, vector& v) { rep(i, v.size()) os << v[i] << (i+1==v.size() ? "" : " "); return os; } template inline ostream& operator<<(ostream& os, vector>& v) { rep(i, v.size()){ os << v[i]; if(i+1 != v.size()) os << endl; } return os; } #ifdef ACL_included inline istream& operator>>(istream& is, modint& n) { int N; is >> N; n = N; return is; } inline ostream& operator<<(ostream& os, modint& n) { os << n.val(); return os; } #endif template T min(){ return INF; }; template T min(const T a, const Args... args){ T b = min(args...); return a < b ? a : b; } template T min(const vector& v){ T ans = INF; for(const T& e : v) chmin(ans, e); return ans; } template T max(){ return -INF; }; template T max(const T a, const Args... args){ T b = max(args...); return a > b ? a : b; } template T max(const vector& v){ T ans = -INF; for(const T& e : v) chmax(ans, e); return ans; } template T sum(){ return 0; }; template T sum(const T a, const Args... args){ T b = sum(args...); return a + b; } template T sum(const vector& v){ T ans = 0; for(const T& e : v) ans += e; return ans; } template T product(){ return 1; }; template T product(const T a, const Args... args){ T b = product(args...); return a * b; } template T product(const vector& v){ T ans = 1; for(const T& e : v) ans *= e; return ans; } template T Xor() { return 0; }; template T Xor(const T a, const Args... args){ T b = Xor(args...); return a ^ b; } template T Xor(const vector& v){ T ans = 0; for(const T& e : v) ans ^= e; return ans; } struct Edge{ long long from; long long to; long long w; Edge(long long from, long long to, long long w) : from(from), to(to), w(w) {} bool operator>(Edge* other) const { return this->w > other->w; } bool operator<(Edge* other) const { return other > this; } }; class UnionFind { private: vector par; vector siz; vector rnk; public: UnionFind(long long n) { par.resize(n, -1); siz.resize(n, 1); rnk.resize(n, 0); } long long root(long long x) { if (par[x] == -1) { return x; } else { return par[x] = root(par[x]); } } bool issame(long long x, long long y) { return root(x) == root(y); } long long size(long long x) { return siz[root(x)]; } void unite(long long x, long long y) { long long rx = root(x); long long ry = root(y); if (rx != ry) { if (rnk[rx] < rnk[ry]) { swap(rx, ry); } par[ry] = rx; siz[rx] += siz[ry]; if (rnk[rx] == rnk[ry]) { rnk[rx]++; } } } }; using Graph = vec>; void G_in(vector>& G, const long long m){ for(int i=0;i> u >> v; u--; v--; G[u].emplace_back(v); G[v].emplace_back(u); } } void G_in1(vector>& G, const long long m){ for(int i=0;i> u >> v; u--; v--; G[u].emplace_back(v); } } void w_G_in(Graph& G, const long long m){ for(int i=0;i> u >> v >> w; u--; v--; G[u].emplace_back(Edge{u, v, w}); G[v].emplace_back(Edge{v, u, w}); } } void w_G_in1(Graph& G, const long long m){ for(int i=0;i> u >> v >> w; u--; v--; G[u].emplace_back(Edge{u, v, w}); } } void dfs(const long long u, const vector>& G, vector& visited){ visited[u] = true; for (long long v : G[u]) { if (!visited[v]) { dfs(v, G, visited); } } visited[u] = false; return; } void bfs(const vector>& G, const long long start){ vector visited(G.size(), false); queue Q; Q.push(start); visited[start] = true; while(!Q.empty()){ long long u = Q.front(); Q.pop(); for (long long v : G[u]) { if (!visited[v]) { visited[v] = true; Q.push(v); } } } } vector bellman_ford(const Graph& G, const long long n, const long long start, bool& negative_cycle){ negative_cycle = false; vector D(n, INF); D[start] = 0; for(int i=0;i D[v] + e.w){ update = true; D[e.to] = D[v] + e.w; } } } if(!update) return D; if(i == n-1 && update) negative_cycle = true; } return D; } vector dijkstra_dense(const Graph& G, const long long n, const long long start){ vector used(n, false); vector D(n, INF); D[start] = 0; for(int _=0;_ dijkstra(const Graph& G, const long long n, const long long start){ vector D(n, INF); D[start] = 0; priority_queue, vector>, greater>> Q; Q.push({D[start], start}); while(!Q.empty()){ long long v = Q.top().second; long long d = Q.top().first; Q.pop(); if(d > D[v]) continue; for (const Edge& e : G[v]) { if(D[e.to] > D[v] + e.w){ D[e.to] = D[v] + e.w; Q.push({D[e.to], e.to}); } } } return D; } vector> Warshall_Floyd(const Graph& G, const long long n, bool& negative_cycle){ vector> Dp(n, vector(n, INF)); for(int v=0;v> Kruskal(const vector>& G){ priority_queue, vector>, greater>> Q; const long long n = G.size(); for(int i=0;i> F(n); while(!Q.empty()){ long long w; pll idx; tie(w,idx) = Q.top(); Q.pop(); long long i,j; tie(i,j) = idx; const Edge e = G[i][j]; const long long u = e.from, v = e.to; if(!uf.issame(u, v)){ F[u].emplace_back(e); uf.unite(u, v); } } return F; } bool is_prime(long long n){ if(n % 2 == 0) return false; if(n % 3 == 0) return false; for(long long i = 1; (6*i-1)*(6*i-1) <= n; i++){ long long k = 6*i-1; if(n % k == 0){ return false; } k = 6*i+1; if(n % k == 0){ return false; } } return true; } vector> factor(long long n){ vector> F; if(n % 2 == 0){ long long cnt = 0; while(!(n&1)){ cnt++; n>>=1; } if(cnt > 0) F.emplace_back(pll{2, cnt}); } if(n % 3 == 0){ long long cnt = 0; while(n % 3 == 0){ cnt++; n /= 3; } if(cnt > 0) F.emplace_back(pll{3, cnt}); } for(long long i = 1; (6*i-1)*(6*i-1) <= n; i++){ long long k = 6*i-1; if(n % k == 0){ long long cnt = 0; while(n % k == 0){ cnt++; n /= k; } F.emplace_back(pll{k, cnt}); } k = 6*i+1; if(n % k == 0){ long long cnt = 0; while(n % k == 0){ cnt++; n /= k; } F.emplace_back(pll{k, cnt}); } } if(n != 1) F.emplace_back(pll{n, 1}); return F; } vector divisor(long long n){ vector D; for(long long i = 1; i*i <= n; i++){ if(n % i == 0){ D.emplace_back(i); if(i != n/i) D.emplace_back(n/i); } } return D; } template T power(const T a, const long long b){ T ans = 1; T p = a; for(int i=0;i<63;i++){ if((b>>i)&1) ans *= p; p *= p; } return ans; } template vector> operator*(vector>& V, vector>& W){ vector> R(V.size(), vector(W[0].size())); for(int i=0;i vector> powmat(const vector>& A, const long long b){ const long long n = A.size(); vector> ans(n, vector(n, 0)); for(int i=0;i> p = A; for(int i=0;i<63;i++){ if((b>>i)&1) ans = ans * p; p = p * p; } return ans; } #ifdef ACL_included const long long facMax = 0;//1e6; vector Fac(facMax); void nCrInit(void){ Fac[0] = Fac[1] = 1; for(int i=2;i> powmatmod(const vector>& A, const long long b) { return powmat(A, b); } #endif ll sqrtll(ll n){ ll ng = 0, ok = n; while(abs(ok-ng) > 1){ ll mid = (ok+ng)/2; if(mid*mid >= n) ok = mid; else ng = mid; } return ok; } int main(void){ ios::sync_with_stdio(false); cin.tie(nullptr); cout << fixed << setprecision(15); #ifdef ACL_included modint::set_mod(998244353); #endif ll n,m,k; cin >> n >> m >> k; ll sm = sqrtll(m); vvll G(n,vll(n,0)); vll Cnt(m,0); rep(i,n){ rep(j,n){ ll val = (i%sm)*sm+j%sm; if(val < m){ G[i][j] = val+1; Cnt[val]++; } } } //cout << G << endl << endl; ll idx = 0; rep(i,n){ rep(j,n){ if(G[i][j]) cout << G[i][j] << spc; else{ while(Cnt[idx] >= n*n/m) idx++; cout << idx+1 << spc; Cnt[idx]++; } } cout << endl; } //cout << Cnt << endl; return 0; }