#include<bits/stdc++.h>
#define ll long long
using namespace std;
struct grana{
   int gde;
   ll low,up;
}pp;
ll L[605],U[605],INF=1e18,lb[305][305],ub[305][305],kol[305][305],K;
vector<grana> graf[605];
int N,M;
ll bo=0;
void belmanford(int gde){
   for(int i=1;i<=N+M;i++){
      U[i]=INF;
      L[i]=-INF;
   }
   U[gde]=L[gde]=0;
   for(int it=1;it<=max(N,M);it++){
      for(int i=1;i<=N+M;i++)
         for(int j=0;j<graf[i].size();j++){
           // bo++;
            U[graf[i][j].gde]=min(U[graf[i][j].gde],U[i]+graf[i][j].up);
            L[graf[i][j].gde]=max(L[graf[i][j].gde],L[i]+graf[i][j].low);
         }
   }
}
void solve(){
   cin>>N>>M;
   for(int i=1;i<=N;i++)
      for(int j=1;j<=M;j++){
         cin>>lb[i][j];
      }
   for(int i=1;i<=N;i++)
      for(int j=1;j<=M;j++){
         cin>>ub[i][j];
      }
   for(int i=1;i<=N;i++)
      for(int j=1;j<=M;j++){
         pp.gde=j+N;
         pp.low=-lb[i][j];
         pp.up=-ub[i][j];
         if(pp.up<pp.low)
            swap(pp.low,pp.up);
         graf[i].push_back(pp);
      }
   for(int i=1;i<=N;i++)
      for(int j=1;j<=M;j++){
         pp.gde=i;
         pp.low=lb[i][j];
         pp.up=ub[i][j];
         if(pp.up<pp.low)
            swap(pp.low,pp.up);
         graf[j+N].push_back(pp);
      }
   belmanford(1);
   //for(int i=1;i<=N+M;i++)
    //  cout<<i<<": "<<L[i]<<" "<<U[i]<<endl;
   for(int i=1;i<=N+M;i++)
      if(U[i]<L[i]){
         cout<<"NE\n";
         return;
      }
   K=INF;
   for(int i=1;i<=N+M;i++)
      K=min(K,L[i]);
   K=-K;
   for(int i=1;i<=N+M;i++){
      L[i]+=K;
      U[i]+=K;
   }
   for(int i=1;i<=N;i++)
      for(int j=1;j<=M;j++){
         kol[i][j]=L[i]-L[j+N];
         if(kol[i][j]<lb[i][j]){
            cout<<"NE\n";
            return;
         }
         if(kol[i][j]>ub[i][j]){
            cout<<"NE\n";
            return;
         }
      }
   cout<<"DA\n";
   for(int i=1;i<=N;i++){
      for(int j=1;j<=M;j++)
         cout<<kol[i][j]<<" ";
      cout<<"\n";
   }
   return;
}
void reset(){
   K=0;
   for(int i=1;i<=N+M;i++){
      L[i]=U[i]=0;
      graf[i].clear();
   }
   for(int i=1;i<=N;i++)
      for(int j=1;j<=M;j++){
         lb[i][j]=0;
         ub[i][j]=0;
         kol[i][j]=0;
      }
}
int main(){
   freopen("Input.txt","r",stdin);
   ios_base::sync_with_stdio(false);
   cin.tie(0);
   int T;
   cin>>T;
   while(T--){
      solve();
      reset();
   }
  // cout<<"OPERACIJA: "<<bo<<endl;
}