#include <bits/stdc++.h>
using namespace std;
int n, m, a[105][105], ans, jl[105 * 105][9];
int main() {
  int _;
  scanf("%d", &_);
  while (_--) {
    scanf("%d%d", &n, &m);
    for (int i = 1; i <= n; ++i) {
      for (int j = 1; j <= m; ++j) {
        scanf("%1d", &a[i][j]);
      }
    }
    ans = 0;
    for (int i = 1; i < n - 1; ++i) {
      for (int j = 1; j <= m; ++j) {
        if (a[i][j]) {
          if (j != m) {
            jl[++ans][1] = i;
            jl[ans][2] = j;
            jl[ans][3] = i + 1;
            jl[ans][4] = j;
            jl[ans][5] = i;
            jl[ans][6] = j + 1;
            a[i][j] ^= 1;
            a[i + 1][j] ^= 1;
            a[i][j + 1] ^= 1;
          } else {
            jl[++ans][1] = i;
            jl[ans][2] = j;
            jl[ans][3] = i + 1;
            jl[ans][4] = j - 1;
            jl[ans][5] = i + 1;
            jl[ans][6] = j;
            a[i][j] ^= 1;
            a[i + 1][j - 1] ^= 1;
            a[i + 1][j] ^= 1;
          }
        }
      }
    }
    for (int i = 1; i < m - 1; ++i) {
      if (a[n - 1][i] && a[n][i]) {
        jl[++ans][1] = n - 1;
        jl[ans][2] = i;
        jl[ans][3] = n;
        jl[ans][4] = i;
        jl[ans][5] = n;
        jl[ans][6] = i + 1;
        a[n - 1][i] ^= 1;
        a[n][i] ^= 1;
        a[n][i + 1] ^= 1;
      } else if (a[n - 1][i] || a[n][i]) {
        jl[++ans][1] = n - 1;
        jl[ans][2] = i + 1;
        jl[ans][3] = (a[n - 1][i]) ? n - 1 : n;
        jl[ans][4] = i;
        jl[ans][5] = n;
        jl[ans][6] = i + 1;
        a[n - 1][i + 1] ^= 1;
        a[jl[ans][3]][i] ^= 1;
        a[n][i + 1] ^= 1;
      }
    }
    int lst = 0;
    if (a[n - 1][m - 1]) {
      a[n - 1][m - 1] ^= 1;
      a[n - 1][m] ^= 1;
      a[n][m - 1] ^= 1;
      lst ^= 1 << 1;
    }
    if (a[n - 1][m]) {
      a[n - 1][m] ^= 1;
      a[n][m - 1] ^= 1;
      a[n][m] ^= 1;
      lst ^= 1 << 3;
    }
    if (a[n][m - 1]) {
      a[n][m - 1] ^= 1;
      a[n][m] ^= 1;
      lst ^= (1 << 1) + (1 << 2);
    }
    if (a[n][m]) {
      lst ^= (1 << 2) + (1 << 3) + (1 << 4);
    }
    if (lst & (1 << 1)) {
      jl[++ans][1] = n - 1;
      jl[ans][2] = m - 1;
      jl[ans][3] = n - 1;
      jl[ans][4] = m;
      jl[ans][5] = n;
      jl[ans][6] = m - 1;
      a[n - 1][m - 1] ^= 1;
      a[n - 1][m] ^= 1;
      a[n][m - 1] ^= 1;
    }
    if (lst & (1 << 2)) {
      jl[++ans][1] = n - 1;
      jl[ans][2] = m - 1;
      jl[ans][3] = n - 1;
      jl[ans][4] = m;
      jl[ans][5] = n;
      jl[ans][6] = m;
      a[n - 1][m - 1] ^= 1;
      a[n - 1][m] ^= 1;
      a[n][m] ^= 1;
    }
    if (lst & (1 << 3)) {
      jl[++ans][1] = n;
      jl[ans][2] = m - 1;
      jl[ans][3] = n - 1;
      jl[ans][4] = m;
      jl[ans][5] = n;
      jl[ans][6] = m;
      a[n][m - 1] ^= 1;
      a[n - 1][m] ^= 1;
      a[n][m] ^= 1;
    }
    if (lst & (1 << 4)) {
      jl[++ans][1] = n;
      jl[ans][2] = m - 1;
      jl[ans][3] = n - 1;
      jl[ans][4] = m - 1;
      jl[ans][5] = n;
      jl[ans][6] = m;
      a[n][m - 1] ^= 1;
      a[n - 1][m - 1] ^= 1;
      a[n][m] ^= 1;
    }
    printf("%d\n", ans);
    for (int i = 1; i <= ans; ++i) {
      for (int j = 1; j <= 6; ++j) {
        printf("%d ", jl[i][j]);
      }
      puts("");
    }
  }
  return 0;
}
