→ Source Copy
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <cstdio>
using namespace std;
const int Mn = 50 + 10;
int a[Mn * Mn][Mn * Mn],n,m,N;
int dx[] = {0, 0, 0, 1,-1};
int dy[] = {0, 1,-1, 0, 0};
inline int num(int x, int y)
{return (x-1) * m + y;}
inline void print()
{
    puts("-------------------------------------");
    for(int i = 1; i <= N; i++)
    {
        for(int j = 1; j <= N + 1; j++)
            printf("%d ",a[i][j]);
        puts("");
    }
}
inline void build()
{
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= m; j++)
        {
            int u = num(i,j);
            for(int k = 0; k < 5; k++)
                if(i + dx[k] >= 1 && i + dx[k] <= n && j + dy[k] >= 1 && j + dy[k] <= m)
                {
                    int v = num(i+dx[k],j+dy[k]);
                    a[u][v] = 1;
                }
        }
    //print();
}
int q[Mn * Mn];
inline void gauss()
{
    int tot(0);
    int py = 1;
    for(int i = 1; i <= N; i++)
    {
        
        int maxk(0),k(py);
        for(int j = py; j <= N; j++)
            if(a[j][i] > maxk)
                maxk = a[j][i], k = j;
        for(int j = 1; j <= N + 1; j++)
            swap(a[py][j],a[k][j]);
    //  printf("%d %d : ",i,py);
//      print();
//      system("pause");
        
        if(!a[py][i])
        {
            q[++tot] = i;
            continue;
        }
        for(int j = py + 1; j <= N; j++)
            if(a[j][i])
                for(int k = 1; k <= N + 1; k++)
                    a[j][k] ^= a[py][k];
        py++;
    }
    if(py > N)
    {
        for(int i = 1; i <= n; i++)
        {
            for(int j = 1; j <= m; j++)
                printf("0 ");
            puts("");
        }
    }
    else
    {
    //  cerr << tot << endl;
//      for(int i = 1; i <= tot; i++)
//          printf("%d \n",q[i]);
        for(int i = 1; i <= tot; i++)
        {
            a[q[i]][N+1] = 1;
            for(int j = 1;j <= N; j++)
                if(a[j][q[i]])
                {
                    a[j][N+1] ^= 1; 
                    a[j][q[i]] = 0;
                }
        }
//      print();
        for(int i = N; i >= 1; i--)
        {
            for(int j = 1; j <= N; j++)
                if(a[i][j])
                {
                    for(int k = 1; k < i; k++)
                        if(a[k][j])
                            a[k][N+1] ^= a[i][N+1];
                    break;
                }
        }
        for(int i = 1; i <= n; i++)
        {
            for(int j = 1; j <= m; j++)
                printf("%d ",a[num(i,j)][N+1]);
            puts("");
        }
    }
}
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        memset(a,0,sizeof a);
        scanf("%d%d",&n,&m);
        N = n * m;
        build();
        gauss();
    }
    return 0;
}