#include <bits/stdc++.h>   using namespace std;   int main() {     ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);     int test;     for (cin >> test; test--;) {       int m, n;       cin >> m >> n;       vector<vector<int>> s(m + 5, vector<int>(n + 5));       for (int i = 1; i <= m; ++i) {         for (int j = 1; j <= n; ++j) {           char x;           cin >> x;           s[i][j] = x -  0 ;         }       }       vector<int> ans;       auto f = [&](int i, int j) {         s[i][j] ^= 1;         ans.push_back(i);         ans.push_back(j);       };       auto fp = [&](pair<int, int> a) {         s[a.first][a.second] ^= 1;         ans.push_back(a.first);         ans.push_back(a.second);       };       if (m > 2) {         for (int i = 1; i <= m - 2; ++i) {           for (int j = 1; j < n; ++j) {             if (s[i][j] == 0) continue;             if (s[i][j + 1] == 1) {               if (s[i + 1][j] == 1) {                 f(i, j);                 f(i + 1, j);                 f(i, j + 1);               } else {                 f(i, j);                 f(i, j + 1);                 f(i + 1, j + 1);               }             } else {               f(i, j);               f(i + 1, j + 1);               f(i + 1, j);             }           }           if (s[i][n] == 1) {             f(i, n);             f(i + 1, n);             f(i + 1, n - 1);           }         }         for (int j = 1, i = m - 1; j < n; ++j) {           if (s[i + 1][j] == 0 && s[i][j] == 0 && (!(i == m - 1 && j == n - 1)))             continue;           int sum = s[i][j] + s[i][j + 1] + s[i + 1][j] + s[i + 1][j + 1];           if (sum == 4) {             f(i + 1, j);             f(i + 1, j + 1);             f(i, j + 1);             f(i, j);             f(i + 1, j);             f(i, j + 1);             f(i, j);             f(i, j + 1);             f(i + 1, j + 1);             f(i, j);             f(i + 1, j);             f(i + 1, j + 1);           }           vector<pair<int, int>> e = {               {i, j}, {i + 1, j}, {i, j + 1}, {i + 1, j + 1}};           sort(e.begin(), e.end(), [&](pair<int, int> x, pair<int, int> y) {             return s[x.first][x.second] < s[y.first][y.second];           });           if (sum == 2) {             if (sum == 2) {               fp(e[0]);               fp(e[1]);               fp(e[2]);               fp(e[0]);               fp(e[1]);               fp(e[3]);             }             continue;           }           if (sum == 3) {             if (s[i][j] == 1) f(i, j);             if (s[i + 1][j] == 1) f(i + 1, j);             if (s[i][j + 1] == 1) f(i, j + 1);             if (s[i + 1][j + 1] == 1) f(i + 1, j + 1);             continue;           }           if (sum == 1) {             fp(e[1]);             fp(e[2]);             fp(e[3]);             fp(e[0]);             fp(e[1]);             fp(e[3]);             fp(e[0]);             fp(e[2]);             fp(e[3]);           }         }       } else {         for (int j = 1; j <= n - 2; ++j) {           for (int i = 1; i < m; ++i) {             if (s[i][j] == 0) continue;             if (s[i + 1][j] == 1) {               if (s[i][j + 1] == 1) {                 f(i, j);                 f(i + 1, j);                 f(i, j + 1);               } else {                 f(i, j);                 f(i + 1, j);                 f(i + 1, j + 1);               }             } else {               f(i, j);               f(i, j + 1);               f(i + 1, j + 1);             }           }           if (s[m][j] == 1) {             f(m, j);             f(m - 1, j + 1);             f(m, j + 1);           }         }         for (int i = 1, j = n - 1; i < m; ++i) {           if (s[i][j] == 0 && s[i][j + 1] == 0 && (!(i == m - 1 && j == n - 1)))             continue;           int sum = s[i][j] + s[i][j + 1] + s[i + 1][j] + s[i + 1][j + 1];           if (sum == 4) {             f(i + 1, j);             f(i + 1, j + 1);             f(i, j + 1);             f(i, j);             f(i + 1, j);             f(i, j + 1);             f(i, j);             f(i, j + 1);             f(i + 1, j + 1);             f(i, j);             f(i + 1, j);             f(i + 1, j + 1);           }           vector<pair<int, int>> e = {               {i, j}, {i + 1, j}, {i, j + 1}, {i + 1, j + 1}};           sort(e.begin(), e.end(), [&](pair<int, int> x, pair<int, int> y) {             return s[x.first][x.second] < s[y.first][y.second];           });           if (sum == 2) {             if (sum == 2) {               fp(e[0]);               fp(e[1]);               fp(e[2]);               fp(e[0]);               fp(e[1]);               fp(e[3]);             }             continue;           }           if (sum == 3) {             if (s[i][j] == 1) f(i, j);             if (s[i + 1][j] == 1) f(i + 1, j);             if (s[i][j + 1] == 1) f(i, j + 1);             if (s[i + 1][j + 1] == 1) f(i + 1, j + 1);             continue;           }           if (sum == 1) {             fp(e[1]);             fp(e[2]);             fp(e[3]);             fp(e[0]);             fp(e[1]);             fp(e[3]);             fp(e[0]);             fp(e[2]);             fp(e[3]);           }         }       }       cout << ans.size() / 6 <<   n ;       for (int i = 0; i < ans.size(); i += 6) {         cout << ans[i] <<     << ans[i + 1] <<     << ans[i + 2] <<                  << ans[i + 3] <<     << ans[i + 4] <<     << ans[i + 5] <<   n ;       }     }   }