#include <bits/stdc++.h>   using namespace std;   using ll = long long;   const ll MOD = 1e9 + 7, N = 1e5 + 10;   void test() {     ll n, m;     cin >> n >> m;     vector<vector<ll>> a(n, vector<ll>(m));     ll cnt = 0;     for (ll i = 0; i < n; ++i) {       for (ll j = 0; j < m; ++j) {         char c;         cin >> c;         a[i][j] = c -  0 ;       }     }     vector<array<ll, 6>> R;     if (n & 1) {       for (ll i = 0; i < m; ++i) {         if (a[n - 1][i]) {           if (i != m - 1) {             R.push_back({n - 1, i, n - 2, i, n - 2, i + 1});             a[n - 2][i + 1] ^= 1;           } else {             R.push_back({n - 1, i, n - 2, i, n - 2, i - 1});             a[n - 2][i - 1] ^= 1;           }           a[n - 1][i] ^= 1;           a[n - 2][i] ^= 1;         }       }       --n;     }     if (m & 1) {       for (ll i = 0; i < n; ++i) {         if (a[i][m - 1]) {           if (i != n - 1) {             R.push_back({i, m - 1, i, m - 2, i + 1, m - 2});             a[i + 1][m - 2] ^= 1;           } else {             R.push_back({i, m - 1, i, m - 2, i - 1, m - 2});             a[i - 1][m - 2] ^= 1;           }           a[i][m - 1] ^= 1;           a[i][m - 2] ^= 1;         }       }       --m;     }     auto solve = [&](vector<vector<ll>> a) {       vector<array<ll, 6>> res;       ll cnt = 0;       for (ll i = 0; i < 2; ++i) {         for (ll j = 0; j < 2; ++j) {           cnt += a[i][j];         }       }       if (cnt == 4) {         res.push_back({0, 0, 1, 0, 1, 1});         res.push_back({0, 1, 1, 0, 1, 1});         res.push_back({1, 0, 0, 0, 0, 1});         res.push_back({1, 1, 0, 0, 0, 1});       } else if (cnt == 3) {         array<ll, 6> r;         ll c = 0;         for (ll i = 0; i < 2; ++i) {           for (ll j = 0; j < 2; ++j) {             if (a[i][j]) {               r[c++] = i;               r[c++] = j;             }           }         }         res.push_back(r);       } else if (cnt == 2) {         vector<array<ll, 2>> is, no;         for (ll i = 0; i < 2; ++i) {           for (ll j = 0; j < 2; ++j) {             if (a[i][j]) {               is.push_back({i, j});             } else {               no.push_back({i, j});             }           }         }         for (auto [x, y] : is) {           array<ll, 6> r;           ll c = 0;           r[c++] = x;           r[c++] = y;           for (auto [x, y] : no) {             r[c++] = x;             r[c++] = y;           }           res.push_back(r);         }       } else if (cnt == 1) {         vector<array<ll, 2>> is, no;         for (ll i = 0; i < 2; ++i) {           for (ll j = 0; j < 2; ++j) {             if (a[i][j]) {               is.push_back({i, j});             } else {               no.push_back({i, j});             }           }         }         for (ll i = 0; i < 3; ++i) {           array<ll, 6> r;           ll c = 0;           r[c++] = is.back()[0];           r[c++] = is.back()[1];           for (ll j = 0; j < 2; ++j) {             r[c++] = no[j][0];             r[c++] = no[j][1];           }           auto bk = no.back();           no.pop_back();           no.insert(no.begin(), bk);           res.push_back(r);         }       }       return res;     };     for (ll i = 0; i < n; i += 2) {       for (ll j = 0; j < m; j += 2) {         vector<vector<ll>> K = {{a[i][j], a[i][j + 1]},                                 {a[i + 1][j], a[i + 1][j + 1]}};         auto res = solve(K);         for (auto r : res) {           for (ll k = 0; k < 6; ++k) {             if (k & 1) {               r[k] += j;             } else {               r[k] += i;             }           }           R.push_back(r);         }       }     }     cout << R.size() <<   n ;     for (auto i : R) {       for (ll j = 0; j < 6; ++j) {         cout << i[j] + 1 <<    ;       }       cout <<   n ;     }     return;   }   int32_t main() {     ios::sync_with_stdio(false);     cin.tie(NULL);     ll tt = 1;     cin >> tt;     for (ll i = 0; i < tt; i++) test();     return 0;   }