#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
#define PI acos(-1)
#define LSB(i) ((i) & -(i))
#define ll long long
#define pb push_back
#define mp make_pair
#define mt make_tuple
#define fi first
#define sc second
#define th third
#define fo fourth
#define pii pair<int,int>
#define pll pair<ll,ll>
#define ldb double
#define MOD 1000000007
#define endl "\n"

#define all(data)       data.begin(),data.end()
#define TYPEMAX(type)   std::numeric_limits<type>::max()
#define TYPEMIN(type)   std::numeric_limits<type>::min()
#define ima_li_te(D,d)  find(all(D),d)
#define MAXN 307
ll n,m,l[MAXN][MAXN],u[MAXN][MAXN],r[MAXN],c[MAXN],l1[MAXN][MAXN],r1[MAXN],c1[MAXN];
bool resi(vector<ll> vr, vector<ll> vc)
{
    if(vr.size()<n)
    {
        vr.pb(l[vr.size()+1][1]);
        bool a=resi(vr,vc);
        vr.pop_back();
        vr.pb(u[vr.size()+1][1]);
        bool b=resi(vr,vc);
        vr.pop_back();
        return a||b;
    }
    else if(vc.size()<m)
    {
        vc.pb(l[1][vc.size()+1]);
        bool a=resi(vr,vc);
        vc.pop_back();
        vc.pb(u[1][vc.size()+1]);
        bool b=resi(vr,vc);
        vc.pop_back();
        return a||b;
    }
    else
    {
        for(int i=1;i<=n;i++) l1[i][1]=vr[i-1];
        for(int i=1;i<=m;i++) l1[1][i]=vc[i-1];
        r1[1]=0;
        for(int i=1;i<=m;i++) c1[i]=r1[1]-l1[1][i];
        for(int i=2;i<=n;i++) r1[i]=l1[i][1]+c1[1];
        ll minel=LLONG_MAX;
        for(int i=1;i<=n;i++) minel=min(minel,r1[i]);
        for(int i=1;i<=m;i++) minel=min(minel,c1[i]);
        if(minel<0)
        {
            for(int i=1;i<=n;i++) r1[i]-=minel;
            for(int i=1;i<=m;i++) c1[i]-=minel;
        }
        bool check=true;
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++)
            {
                if(!(l[i][j]<=r1[i]-c1[j] && r1[i]-c1[j]<=u[i][j]))
                {
                    check=false;
                    break;
                }
            }
        }
        if(check)
        {
            for(int i=1;i<=n;i++) r[i]=r1[i];
            for(int i=1;i<=m;i++) c[i]=c1[i];
            return true;
        }
        else return false;
    }
}
int main()
{
    ios::sync_with_stdio(false); cin.tie(0);
    int tt; cin>>tt;
    while(tt--)
    {
        cin>>n>>m;
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++) cin>>l[i][j];
        }
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++) cin>>u[i][j];
        }
        bool check1=true,check2=true,check3=true;
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++)
            {
                if(l[i][j]!=u[i][j]) check1=false;
                if(i%2==j%2 && l[i][j]!=u[i][j]) check2=false;
                if((i==1 || j==1) && l[i][j]!=u[i][j]) check3=false;
            }
        }
        if(check1)
        {
            r[1]=0;
            for(int i=1;i<=m;i++) c[i]=r[1]-u[1][i];
            for(int i=2;i<=n;i++) r[i]=u[i][1]+c[1];
            ll minel=LLONG_MAX;
            for(int i=1;i<=n;i++) minel=min(minel,r[i]);
            for(int i=1;i<=m;i++) minel=min(minel,c[i]);
            if(minel<0)
            {
                for(int i=1;i<=n;i++) r[i]-=minel;
                for(int i=1;i<=m;i++) c[i]-=minel;
            }
            bool check=true;
            for(int i=1;i<=n;i++)
            {
                for(int j=1;j<=m;j++)
                {
                    if(r[i]-c[j]!=u[i][j])
                    {
                        check=false;
                        break;
                    }
                }
            }
            if(check)
            {
                cout<<"DA"<<endl;
                for(int i=1;i<=n;i++)
                {
                    for(int j=1;j<=m;j++) cout<<r[i]-c[j]<<" ";
                    cout<<endl;
                }
            }
            else cout<<"NE"<<endl;
        }
        else if(check2)
        {
            r[1]=0;
            for(int i=1;i<=m;i++) c[i]=r[1]-u[1][i];
            for(int i=2;i<=n;i++) r[i]=u[i][1]+c[1];
            ll minel=LLONG_MAX;
            for(int i=1;i<=n;i++) minel=min(minel,r[i]);
            for(int i=1;i<=m;i++) minel=min(minel,c[i]);
            if(minel<0)
            {
                for(int i=1;i<=n;i++) r[i]-=minel;
                for(int i=1;i<=n;i++) c[i]-=minel;
            }
            bool check=true;
            for(int i=1;i<=n;i++)
            {
                for(int j=1;j<=m;j++)
                {
                    if(!(l[i][j]<=r[i]-c[j] && r[i]-c[j]<=u[i][j]))
                    {
                        check=false;
                        break;
                    }
                }
            }
            if(check)
            {
                cout<<"DA"<<endl;
                for(int i=1;i<=n;i++)
                {
                    for(int j=1;j<=m;j++) cout<<r[i]-c[j]<<" ";
                    cout<<endl;
                }
            }
            else cout<<"NE"<<endl;
        }
        else if(n<=10 && m<=10)
        {

            vector<ll> vr,vc;
            if(resi(vr,vc))
            {
                cout<<"DA"<<endl;
                for(int i=1;i<=n;i++)
                {
                    for(int j=1;j<=m;j++) cout<<r[i]-c[j]<<" ";
                    cout<<endl;
                }
            }
            else cout<<"NE"<<endl;
        }
        else cout<<"NE"<<endl;
    }
    return 0;
}