#include <bits/stdc++.h>
using namespace std;
const int dx[] = {0, 0, 1, 1}, dy[] = {0, 1, 0, 1};
vector<string> F;
void flip(int x, int y, int t) {
  for (int k = 0; k < 4; k++)
    if (k ^ t) F[x + dx[k]][y + dy[k]] ^= 1;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  ((void)0);
  ((void)0);
  ((void)0);
  int T, N, M;
  for (cin >> T; T--;) {
    vector<tuple<int, int, int>> ans;
    cin >> N >> M;
    F.resize(N);
    for (int i = 0; i < N; i++) cin >> F[i];
    for (int i = 0; i < N - 2; i++) {
      for (int j = 0; j + 1 < M; j += 2) {
        if (F[i][j] == '1' && F[i][j + 1] == '1') {
          ans.emplace_back(i, j, 3);
          flip(i, j, 3);
        } else if (F[i][j] == '1') {
          ans.emplace_back(i, j, 1);
          flip(i, j, 1);
        } else if (F[i][j + 1] == '1') {
          ans.emplace_back(i, j, 0);
          flip(i, j, 0);
        }
      }
      if ((M & 1) && F[i][M - 1] == '1') {
        ans.emplace_back(i, M - 2, 0);
        flip(i, M - 2, 0);
      }
    }
    for (int j = 0; j < M - 1; j++) {
      if (F[N - 2][j] == '1' && F[N - 1][j] == '1') {
        ans.emplace_back(N - 2, j, 1);
        flip(N - 2, j, 1);
      } else if (F[N - 2][j] == '1') {
        ans.emplace_back(N - 2, j, 2);
        flip(N - 2, j, 2);
      } else if (F[N - 1][j] == '1') {
        ans.emplace_back(N - 2, j, 0);
        flip(N - 2, j, 0);
      }
    }
    if (F[N - 2][M - 1] == '1' && F[N - 1][M - 1] == '1') {
      ans.emplace_back(N - 2, M - 2, 1);
      ans.emplace_back(N - 2, M - 2, 3);
      flip(N - 2, N - 2, 1);
      flip(N - 2, N - 2, 3);
    } else if (F[N - 2][M - 1] == '1') {
      ans.emplace_back(N - 2, M - 2, 3);
      ans.emplace_back(N - 2, M - 2, 0);
      ans.emplace_back(N - 2, M - 2, 2);
    } else if (F[N - 1][M - 1] == '1') {
      ans.emplace_back(N - 2, M - 2, 1);
      ans.emplace_back(N - 2, M - 2, 0);
      ans.emplace_back(N - 2, M - 2, 2);
    }
    cout << ans.size() << '\n';
    for (auto [x, y, t] : ans) {
      for (int k = 0; k < 4; k++)
        if (k ^ t) cout << x + dx[k] + 1 << ' ' << y + dy[k] + 1 << ' ';
      cout << '\n';
    }
  }
  return 0;
}
