#include <bits/stdc++.h>
using namespace std;
int testcase = 1;
const int MAXN = 1e6 + 10;
const int MOD = 1e9 + 7;
int n, m, k, a, b, c, d;
int tmp, tmp1, tmp2, tmp3;
int mp[200][200];
vector<vector<int> > ans;
void init() {}
void up(int i, int j) { mp[i][j] = (mp[i][j] + 1) % 2; }
void move(int i, int j, int d1, int d2) {
  ans.push_back({i, j, i + d1, j, i, j + d2});
  up(i, j), up(i + d1, j), up(i, j + d2);
}
void solve() {
  scanf("%d %d", &n, &m);
  ans.clear();
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++) scanf("%1d", &mp[i][j]);
  for (int i = 1; i <= n - 2; i++) {
    for (int j = 1; j < m; j++) {
      if (!mp[i][j]) continue;
      move(i, j, 1, 1);
    }
    if (mp[i][m]) move(i + 1, m, -1, -1);
  }
  for (int j = 1; j <= m - 1; j++) {
    if (mp[n - 1][j] and mp[n][j])
      move(n - 1, j, 1, 1);
    else if (mp[n - 1][j])
      move(n - 1, j + 1, 1, -1);
    else if (mp[n][j])
      move(n, j + 1, -1, -1);
  }
  if (mp[n - 1][m] and mp[n][m])
    move(n - 1, m - 1, 1, 1), move(n, m - 1, -1, 1);
  else if (mp[n - 1][m])
    move(n, m, -1, -1), move(n - 1, m, 1, -1), move(n - 1, m - 1, 1, 1);
  else if (mp[n][m])
    move(n - 1, m, 1, -1), move(n, m, -1, -1), move(n, m - 1, -1, 1);
  printf("%d\n", (int)ans.size());
  for (vector<int> v : ans) {
    for (int i : v) printf("%d ", i);
    printf("\n");
  }
}
int main() {
  scanf("%d", &testcase);
  init();
  while (testcase--) solve();
  return 0;
}
