#include <bits/stdc++.h>
using namespace std;
long long T;
long long n, m;
string s[105];
bool v[105][105];
vector<long long> ve1, ve2, ve3, ve4, ve5, ve6;
void f(long long p1, long long p2, long long p3, long long p4, long long p5,
       long long p6) {
  ve1.push_back(p1);
  ve2.push_back(p2);
  ve3.push_back(p3);
  ve4.push_back(p4);
  ve5.push_back(p5);
  ve6.push_back(p6);
}
int main() {
  scanf("%lld", &T);
  while (T--) {
    scanf("%lld%lld", &n, &m);
    for (long long i = 0; i < n; i++) {
      cin >> s[i];
      for (long long j = 0; j < m; j++) {
        v[i][j] = (s[i][j] == '1');
      }
      s[i] = "";
    }
    for (long long i = 0; i < n - 2; i++) {
      for (long long j = 0; j < m - 1; j++) {
        if (v[i][j] == 0 && v[i][j + 1] == 0) continue;
        if (v[i][j] == 0 && v[i][j + 1] == 1) {
          v[i][j + 1] = 0;
          v[i + 1][j] ^= 1;
          v[i + 1][j + 1] ^= 1;
          f(i, j + 1, i + 1, j, i + 1, j + 1);
        } else if (v[i][j] == 1 && v[i][j + 1] == 0) {
          v[i][j] = 0;
          v[i + 1][j] ^= 1;
          v[i + 1][j + 1] ^= 1;
          f(i, j, i + 1, j, i + 1, j + 1);
        } else {
          v[i][j] = 0;
          v[i][j + 1] = 0;
          v[i + 1][j] ^= 1;
          f(i, j, i, j + 1, i + 1, j);
        }
      }
    }
    for (long long j = 0; j < m - 1; j++) {
      if (v[n - 2][j] == 0 && v[n - 1][j] == 0) continue;
      if (v[n - 2][j] == 0 && v[n - 1][j] == 1) {
        v[n - 1][j] = 0;
        v[n - 2][j + 1] ^= 1;
        v[n - 1][j + 1] ^= 1;
        f(n - 1, j, n - 2, j + 1, n - 1, j + 1);
      } else if (v[n - 2][j] == 1 && v[n - 1][j] == 0) {
        v[n - 2][j] = 0;
        v[n - 2][j + 1] ^= 1;
        v[n - 1][j + 1] ^= 1;
        f(n - 2, j, n - 2, j + 1, n - 1, j + 1);
      } else {
        v[n - 2][j] = 0;
        v[n - 1][j] = 0;
        v[n - 2][j + 1] ^= 1;
        f(n - 2, j, n - 1, j, n - 2, j + 1);
      }
    }
    if (v[n - 2][m - 1] == 0 && v[n - 1][m - 1] == 1) {
      v[n - 2][m - 1] = 1;
      v[n - 1][m - 1] = 0;
      v[n - 2][m - 2] = 1;
      f(n - 2, m - 1, n - 1, m - 1, n - 2, m - 2);
      v[n - 2][m - 1] = 0;
      v[n - 1][m - 2] = 1;
      v[n - 1][m - 1] = 1;
      f(n - 2, m - 1, n - 1, m - 2, n - 1, m - 1);
      v[n - 1][m - 2] = 0;
      v[n - 1][m - 1] = 0;
      v[n - 2][m - 2] = 0;
      f(n - 1, m - 2, n - 1, m - 1, n - 2, m - 2);
    } else if (v[n - 2][m - 1] == 1 && v[n - 1][m - 1] == 0) {
      v[n - 2][m - 1] = 0;
      v[n - 1][m - 1] = 1;
      v[n - 2][m - 2] = 1;
      f(n - 2, m - 1, n - 1, m - 1, n - 2, m - 2);
      v[n - 2][m - 1] = 1;
      v[n - 1][m - 2] = 1;
      v[n - 1][m - 1] = 0;
      f(n - 2, m - 1, n - 1, m - 2, n - 1, m - 1);
      v[n - 1][m - 2] = 0;
      v[n - 2][m - 1] = 0;
      v[n - 2][m - 2] = 0;
      f(n - 1, m - 2, n - 2, m - 1, n - 2, m - 2);
    } else if (v[n - 2][m - 1] == 1 && v[n - 1][m - 1] == 1) {
      v[n - 2][m - 1] = 0;
      v[n - 1][m - 2] = 1;
      v[n - 2][m - 2] = 1;
      f(n - 2, m - 1, n - 1, m - 2, n - 2, m - 2);
      v[n - 1][m - 1] = 0;
      v[n - 1][m - 2] = 0;
      v[n - 2][m - 2] = 0;
      f(n - 1, m - 1, n - 1, m - 2, n - 2, m - 2);
    }
    printf("%lld\n", (long long)ve1.size());
    for (long long i = 0; i < ve1.size(); i++) {
      printf("%lld %lld %lld %lld %lld %lld\n", ve1[i] + 1, ve2[i] + 1,
             ve3[i] + 1, ve4[i] + 1, ve5[i] + 1, ve6[i] + 1);
    }
    ve1.clear();
    ve2.clear();
    ve3.clear();
    ve4.clear();
    ve5.clear();
    ve6.clear();
  }
  return 0;
}
