#include <bits/stdc++.h>
using namespace std;
vector<vector<int>> v;
vector<vector<int>> ans;
void g(int i, int j, int type) {
  if (type == 1) {
    ans.push_back({i, j, i - 1, j, i - 1, j + 1});
    v[i][j] ^= 1, v[i - 1][j] ^= 1, v[i - 1][j + 1] ^= 1;
  }
  if (type == 2) {
    ans.push_back({i, j, i, j + 1, i - 1, j});
    v[i][j] ^= 1, v[i - 1][j] ^= 1, v[i][j + 1] ^= 1;
  }
  if (type == 3) {
    ans.push_back({i, j, i, j - 1, i + 1, j - 1});
    v[i][j] ^= 1, v[i + 1][j - 1] ^= 1, v[i][j - 1] ^= 1;
  }
  if (type == 4) {
    ans.push_back({i, j, i, j - 1, i - 1, j - 1});
    v[i][j] ^= 1, v[i - 1][j - 1] ^= 1, v[i][j - 1] ^= 1;
  }
  if (type == 5) {
    ans.push_back({i, j, i + 1, j, i, j - 1});
    v[i][j] ^= 1, v[i][j - 1] ^= 1, v[i + 1][j] ^= 1;
  }
  if (type == 6) {
    ans.push_back({i, j, i - 1, j, i - 1, j - 1});
    v[i][j] ^= 1, v[i - 1][j] ^= 1, v[i - 1][j - 1] ^= 1;
  }
}
void f(int i, int j) { v[i][j] ^= 1; }
vector<int> get(int i, int j) {
  vector<int> t3;
  vector<pair<int, int>> d = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}, {0, 0}};
  int ti = i, tj = j;
  for (int k = 0; k < 5; ++k) {
    ti += d[k].first, tj += d[k].second;
    if (ti >= 0 && ti < 2 && tj >= 0 && tj < 2) {
      t3.push_back(ti);
      t3.push_back(tj);
      f(ti, tj);
    }
    ti -= d[k].first, tj -= d[k].second;
  }
  return t3;
}
signed main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int t;
  cin >> t;
  while (t--) {
    int n, m;
    cin >> n >> m;
    v.clear();
    v.resize(n, vector<int>(m));
    for (int i = 0; i < n; ++i) {
      string s;
      cin >> s;
      for (int j = 0; j < m; ++j) v[i][j] = s[j] - '0';
    }
    ans.clear();
    for (int i = n - 1; i > 1; i--) {
      for (int j = 0; j < m; ++j) {
        if (j + 1 < m && v[i][j] == 1 && v[i][j + 1] == 1) g(i, j, 2);
        if (v[i][j] == 1 && j + 1 < m) g(i, j, 1);
      }
      if (v[i][m - 1]) g(i, m - 1, 6);
    }
    for (int j = m - 1; j > 1; --j) {
      if (v[0][j] == 1 && v[1][j] == 1) g(0, j, 5);
      if (v[0][j] == 1) g(0, j, 3);
      if (v[1][j] == 1) g(1, j, 4);
    }
    for (int i = 0; i < 16; ++i) {
      int a = i % 2, b = i / 2 % 2, c = i / 4 % 2, d = i / 8 % 2;
      vector<vector<int>> temp;
      if (a) temp.push_back(get(0, 0));
      if (b) temp.push_back(get(0, 1));
      if (c) temp.push_back(get(1, 0));
      if (d) temp.push_back(get(1, 1));
      if (v[0][0] + v[0][1] + v[1][0] + v[1][1] == 0) {
        for (auto& j : temp) ans.push_back(j);
        break;
      } else
        for (auto& i : temp) {
          for (int j = 0; j < i.size(); j += 2) {
            f(i[j], i[j + 1]);
          }
        }
    }
    cout << ans.size() << '\n';
    for (auto& i : ans) {
      for (auto& j : i) cout << j + 1 << ' ';
      cout << '\n';
    }
  }
  return 0;
}
