#include <bits/stdc++.h>
using namespace std;
const int MAXN = 105, SZ = 100000;
int v[MAXN][MAXN];
vector<int> ans[SZ];
int S;
void makeSquareGood(int x, int y) {
  vector<vector<int> > f;
  for (int a = 0; a < 5; a++) {
    for (int b = 0; b < 5; b++) {
      for (int c = 0; c < 5; c++) {
        for (int d = 0; d < 5; d++) {
          f = {{v[x][y], v[x][y + 1]}, {v[x + 1][y], v[x + 1][y + 1]}};
          if (a == 0) {
            f[0][0] = !f[0][0];
            f[1][0] = !f[1][0];
            f[0][1] = !f[0][1];
          } else if (a == 1) {
            f[0][1] = !f[0][1];
            f[0][0] = !f[0][0];
            f[1][1] = !f[1][1];
          } else if (a == 2) {
            f[1][0] = !f[1][0];
            f[0][0] = !f[0][0];
            f[1][1] = !f[1][1];
          } else if (a == 3) {
            f[1][1] = !f[1][1];
            f[0][1] = !f[0][1];
            f[1][0] = !f[1][0];
          }
          if (b == 0) {
            f[0][0] = !f[0][0];
            f[1][0] = !f[1][0];
            f[0][1] = !f[0][1];
          } else if (b == 1) {
            f[0][1] = !f[0][1];
            f[0][0] = !f[0][0];
            f[1][1] = !f[1][1];
          } else if (b == 2) {
            f[1][0] = !f[1][0];
            f[0][0] = !f[0][0];
            f[1][1] = !f[1][1];
          } else if (b == 3) {
            f[1][1] = !f[1][1];
            f[0][1] = !f[0][1];
            f[1][0] = !f[1][0];
          }
          if (c == 0) {
            f[0][0] = !f[0][0];
            f[1][0] = !f[1][0];
            f[0][1] = !f[0][1];
          } else if (c == 1) {
            f[0][1] = !f[0][1];
            f[0][0] = !f[0][0];
            f[1][1] = !f[1][1];
          } else if (c == 2) {
            f[1][0] = !f[1][0];
            f[0][0] = !f[0][0];
            f[1][1] = !f[1][1];
          } else if (c == 3) {
            f[1][1] = !f[1][1];
            f[0][1] = !f[0][1];
            f[1][0] = !f[1][0];
          }
          if (d == 0) {
            f[0][0] = !f[0][0];
            f[1][0] = !f[1][0];
            f[0][1] = !f[0][1];
          } else if (d == 1) {
            f[0][1] = !f[0][1];
            f[0][0] = !f[0][0];
            f[1][1] = !f[1][1];
          } else if (d == 2) {
            f[1][0] = !f[1][0];
            f[0][0] = !f[0][0];
            f[1][1] = !f[1][1];
          } else if (d == 3) {
            f[1][1] = !f[1][1];
            f[0][1] = !f[0][1];
            f[1][0] = !f[1][0];
          }
          if (f == vector<vector<int> >(2, vector<int>(2, 0))) {
            if (a == 0) {
              ans[S++] = {x, y, x + 1, y, x, y + 1};
            } else if (a == 1) {
              ans[S++] = {x, y + 1, x, y, x + 1, y + 1};
            } else if (a == 2) {
              ans[S++] = {x + 1, y, x, y, x + 1, y + 1};
            } else if (a == 3) {
              ans[S++] = {x + 1, y + 1, x, y + 1, x + 1, y};
            }
            if (b == 0) {
              ans[S++] = {x, y, x + 1, y, x, y + 1};
            } else if (b == 1) {
              ans[S++] = {x, y + 1, x, y, x + 1, y + 1};
            } else if (b == 2) {
              ans[S++] = {x + 1, y, x, y, x + 1, y + 1};
            } else if (b == 3) {
              ans[S++] = {x + 1, y + 1, x, y + 1, x + 1, y};
            }
            if (c == 0) {
              ans[S++] = {x, y, x + 1, y, x, y + 1};
            } else if (c == 1) {
              ans[S++] = {x, y + 1, x, y, x + 1, y + 1};
            } else if (c == 2) {
              ans[S++] = {x + 1, y, x, y, x + 1, y + 1};
            } else if (c == 3) {
              ans[S++] = {x + 1, y + 1, x, y + 1, x + 1, y};
            }
            if (d == 0) {
              ans[S++] = {x, y, x + 1, y, x, y + 1};
            } else if (d == 1) {
              ans[S++] = {x, y + 1, x, y, x + 1, y + 1};
            } else if (d == 2) {
              ans[S++] = {x + 1, y, x, y, x + 1, y + 1};
            } else if (d == 3) {
              ans[S++] = {x + 1, y + 1, x, y + 1, x + 1, y};
            }
            return;
          }
        }
      }
    }
  }
}
void shiftRight(int x, int y) {
  int a = v[x][y], b = v[x + 1][y];
  if (a + b == 2) {
    ans[S++] = {x, y, x + 1, y, x + 1, y + 1};
    v[x][y] = !v[x][y];
    v[x + 1][y] = !v[x + 1][y];
    v[x + 1][y + 1] = !v[x + 1][y + 1];
  } else if (a + b == 1) {
    if (a == 1) {
      ans[S++] = {x, y, x, y + 1, x + 1, y + 1};
      v[x][y] = !v[x][y];
      v[x][y + 1] = !v[x][y + 1];
      v[x + 1][y + 1] = !v[x + 1][y + 1];
    } else {
      ans[S++] = {x + 1, y, x + 1, y + 1, x, y + 1};
      v[x + 1][y] = !v[x + 1][y];
      v[x + 1][y + 1] = !v[x + 1][y + 1];
      v[x][y + 1] = !v[x][y + 1];
    }
  }
}
void shiftDown(int x, int y) {
  int a = v[x][y], b = v[x][y + 1];
  if (a + b == 2) {
    ans[S++] = {x, y, x, y + 1, x + 1, y + 1};
    v[x][y] = !v[x][y];
    v[x][y + 1] = !v[x][y + 1];
    v[x + 1][y + 1] = !v[x + 1][y + 1];
  } else if (a + b == 1) {
    if (a == 1) {
      ans[S++] = {x, y, x + 1, y, x + 1, y + 1};
      v[x][y] = !v[x][y];
      v[x + 1][y] = !v[x + 1][y];
      v[x + 1][y + 1] = !v[x + 1][y + 1];
    } else {
      ans[S++] = {x + 1, y, x + 1, y + 1, x, y + 1};
      v[x + 1][y] = !v[x + 1][y];
      v[x + 1][y + 1] = !v[x + 1][y + 1];
      v[x][y + 1] = !v[x][y + 1];
    }
  }
}
signed main() {
  int q, n, m, a, b, c, d, cnt;
  char x;
  cin >> q;
  while (q--) {
    cin >> n >> m;
    S = 0;
    fill(ans, ans + SZ, vector<int>(0));
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < m; j++) {
        cin >> x;
        v[i][j] = (x - '0');
      }
    }
    for (int i = 0; i < n - 2; i++) {
      for (int j = 0; j < m - 2; j++) {
        if (v[i][j]) {
          ans[S++] = {i, j + 1, i, j, i + 1, j};
          v[i][j + 1] = !v[i][j + 1];
          v[i][j] = !v[i][j];
          v[i + 1][j] = !v[i + 1][j];
        }
      }
    }
    for (int j = 0; j + 3 < m; j += 2) {
      makeSquareGood(n - 2, j);
    }
    if (m % 2) {
      shiftRight(n - 2, m - 3);
    }
    for (int i = 0; i + 3 < n; i += 2) {
      makeSquareGood(i, m - 2);
    }
    if (n % 2) {
      shiftDown(n - 3, m - 2);
    }
    makeSquareGood(n - 2, m - 2);
    cout << S << "\n";
    for (int i = 0; i < S; i++) {
      for (int j = 0; j < 6; j++) {
        cout << ans[i][j] + 1 << " ";
      }
      cout << "\n";
    }
    cout << "\n";
  }
  return 0;
}
