1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
| #include<bits/stdc++.h> #define inf 0x3f3f3f3f3f3f3f3fll #define debug(x) cerr<<#x<<"="<<x<<endl using namespace std; using ll=long long; using ld=long double; using pli=pair<ll,int>; using pi=pair<int,int>; template<typename A> using vc=vector<A>; inline int read() { int s=0,w=1;char ch; while((ch=getchar())>'9'||ch<'0') if(ch=='-') w=-1; while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar(); return s*w; } int col[1001][1001]; int nod[1001][501]; int a[501][501]; bool vis[501]; int cnt[501]; int n,r,c; inline void clear() { memset(col,0,sizeof(col)); memset(nod,0,sizeof(nod)); } inline int get(int id) { for(int i=1;;i++) if(!nod[id][i]) return i; } inline void add(int u,int v,int c1,int c2) { if(nod[v][c1]) { int w=nod[v][c1]; nod[v][c1]=nod[w][c1]=0; col[v][w]=col[w][v]=0; add(v,w,c2,c1); } nod[v][c1]=u,nod[u][c1]=v; col[u][v]=col[v][u]=c1; } inline void add(int u,int v) { int c1=get(u),c2=get(v); add(u,v,c1,c2); } inline void solve() { memset(cnt,0,sizeof(cnt)); n=read(),r=read(),c=read(); for(int i=1;i<=r;i++) for(int j=1;j<=c;j++) cnt[a[i][j]=read()]++; for(int i=1;i<=n;i++) if(cnt[i]+n-c<r) { printf("No\n"); return ; } printf("Yes\n"); clear(); for(int i=1;i<=r;i++) { memset(vis,0,sizeof(vis)); for(int j=1;j<=c;j++) vis[a[i][j]]=1; for(int j=1;j<=n;j++) if(!vis[j]) add(i,j+n); } for(int i=1;i<=r;i++) for(int j=1;j<=n;j++) if(col[i][j+n]) a[i][col[i][j+n]+c]=j; clear(); for(int i=1;i<=n;i++) { memset(vis,0,sizeof(vis)); for(int j=1;j<=r;j++) vis[a[j][i]]=1; for(int j=1;j<=n;j++) if(!vis[j]) add(i,j+n); } for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(col[i][j+n]) a[col[i][j+n]+r][i]=j;
for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) printf("%d%c",a[i][j]," \n"[j==n]); } int main() { int T=read(); while(T--) solve(); return 0; }
|