#include <bits/stdc++.h>
using namespace std;
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  long long n, x, t, m, y, z, k;
  cin >> t;
  while (t--) {
    cin >> n >> m;
    vector<vector<long long> > a(n, vector<long long>(m));
    string s;
    for (int i = 0; i < n; i++) {
      cin >> s;
      for (int j = 0; j < m; j++) {
        a[i][j] = s[j] - '0';
      }
    }
    vector<vector<long long> > ans;
    auto f = [&](int i, int j) { a[i][j] ^= 1; };
    for (int i = 0; i < n - 2; i++) {
      for (int j = 0; j < m - 1; j++) {
        if (a[i][j]) {
          ans.push_back({i, j, i + 1, j, i, j + 1});
          f(i, j);
          f(i + 1, j);
          f(i, j + 1);
        }
      }
      if (a[i][m - 1]) {
        ans.push_back({i, m - 1, i + 1, m - 1, i + 1, m - 2});
        f(i, m - 1);
        f(i + 1, m - 1);
        f(i + 1, m - 2);
      }
    }
    for (int j = 0; j < m - 2; j++) {
      if (a[n - 2][j] && a[n - 1][j]) {
        ans.push_back({n - 2, j, n - 1, j, n - 2, j + 1});
        f(n - 2, j);
        f(n - 1, j);
        f(n - 2, j + 1);
      } else if (a[n - 2][j]) {
        ans.push_back({n - 2, j, n - 1, j + 1, n - 2, j + 1});
        f(n - 2, j);
        f(n - 1, j + 1);
        f(n - 2, j + 1);
      } else if (a[n - 1][j]) {
        ans.push_back({n - 1, j, n - 1, j + 1, n - 2, j + 1});
        f(n - 1, j);
        f(n - 1, j + 1);
        f(n - 2, j + 1);
      }
    }
    for (int k = 0; k < 4; k++) {
      vector<long long> move;
      auto choose = [&](pair<long long, long long> o) {
        move.push_back(o.first);
        move.push_back(o.second);
        a[o.first][o.second] ^= 1;
      };
      vector<pair<long long, long long> > b, g;
      for (int i = n - 2; i < n; i++) {
        for (int j = m - 2; j < m; j++) {
          if (a[i][j])
            b.push_back({i, j});
          else
            g.push_back({i, j});
        }
      }
      if (b.size() == 0) break;
      if (b.size() == 4) {
        choose(b[0]);
        choose(b[1]);
        choose(b[2]);
      } else if (b.size() == 1) {
        choose(b[0]);
        choose(g[0]);
        choose(g[1]);
      } else if (b.size() == 2) {
        choose(b[0]);
        choose(g[0]);
        choose(g[1]);
      } else if (b.size() == 3) {
        choose(b[0]);
        choose(b[1]);
        choose(b[2]);
      }
      ans.push_back(move);
    }
    cout << ans.size() << '\n';
    for (auto &it : ans) {
      for (int j : it) {
        cout << j + 1 << " ";
      }
      cout << '\n';
    }
  }
  return 0;
}
