#include #define endl'\n' using namespace std; const int MAXN=305; const int MAXP=10; int n,d,p; int a[MAXN][MAXN]; int pref[MAXP][MAXN][MAXN]; vector fact; int tmp[MAXP]={0}; int maxr[MAXP]={0}; int ans[MAXP]={0}; int sol[MAXN][MAXN]; int best(int i,int j,int x,int y) { int max1=0,max2=0; int best=0; for(int k=1;k<=p;k++) { int cur=pref[k][i][j]-pref[k][i-x][j]-pref[k][i][j-y]+pref[k][i-x][j-y]; if(cur>max1) { max2=max1; max1=cur; best=k; } else if(cur>max2) { max2=cur; } } if(max1==max2) return 0; return best; } int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); freopen("gerrymandering.in","r",stdin); freopen("gerrymandering.out","w",stdout); cin>>n>>d>>p; for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { cin>>a[i][j]; } } int sz=n*n/d; for(int i=1;i<=sz;i++) { if(sz%i==0) fact.push_back(i); } for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { for(int k=1;k<=p;k++) pref[k][i][j]=pref[k][i-1][j]+pref[k][i][j-1]-pref[k][i-1][j-1]; pref[a[i][j]][i][j]++; } } for(int f=0;f=maxr[i]) { maxr[i]=tmp[i]; ans[i]=f; } } } for(int k=1;k<=p;k++) { int x=fact[ans[k]]; int y=sz/x; for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { sol[i][j]=((i+x-1)/x-1)*n/y+(j+y-1)/y; } } for(int i=1;i<=n;i++) { cout<