#include <bits/stdc++.h>
using namespace std;
mt19937 gen(time(0));
const int N = 2e5 + 100;
const int M = 30;
const int mod = 998244353;
const int inf = 1e9 + 7;
pair<int, int> ans[N][3], b[10];
int a[110][110];
int D, uk;
void add() {
  ans[D][0] = b[0];
  ans[D][1] = b[1];
  ans[D++][2] = b[2];
  for (int i = 0; i < 3; i++)
    a[b[i].first][b[i].second] = 1 - a[b[i].first][b[i].second];
}
void solve3(int i, int j) {
  uk = 0;
  if (a[i][j]) b[uk++] = {i, j};
  if (a[i + 1][j]) b[uk++] = {i + 1, j};
  if (a[i][j + 1]) b[uk++] = {i, j + 1};
  if (a[i + 1][j + 1]) b[uk++] = {i + 1, j + 1};
  add();
}
void solve2(int i, int j) {
  uk = 0;
  if (!a[i][j] && uk < 2) b[uk++] = {i, j};
  if (!a[i + 1][j] && uk < 2) b[uk++] = {i + 1, j};
  if (!a[i][j + 1] && uk < 2) b[uk++] = {i, j + 1};
  if (!a[i + 1][j + 1] && uk < 2) b[uk++] = {i + 1, j + 1};
  if (a[i][j] && uk < 3) b[uk++] = {i, j};
  if (a[i + 1][j] && uk < 3) b[uk++] = {i + 1, j};
  if (a[i][j + 1] && uk < 3) b[uk++] = {i, j + 1};
  if (a[i + 1][j + 1] && uk < 3) b[uk++] = {i + 1, j + 1};
  add();
  solve3(i, j);
}
void solve1(int i, int j) {
  uk = 0;
  if (!a[i][j] && uk < 2) b[uk++] = {i, j};
  if (!a[i + 1][j] && uk < 2) b[uk++] = {i + 1, j};
  if (!a[i][j + 1] && uk < 2) b[uk++] = {i, j + 1};
  if (!a[i + 1][j + 1] && uk < 2) b[uk++] = {i + 1, j + 1};
  if (a[i][j]) b[uk++] = {i, j};
  if (a[i + 1][j]) b[uk++] = {i + 1, j};
  if (a[i][j + 1]) b[uk++] = {i, j + 1};
  if (a[i + 1][j + 1]) b[uk++] = {i + 1, j + 1};
  add();
  solve2(i, j);
}
void solve4(int i, int j) {
  b[0] = {i, j};
  b[1] = {i + 1, j};
  b[2] = {i, j + 1};
  uk = 3;
  add();
  solve1(i, j);
}
void f(int st, int m) {
  for (int j = 0; j < m - 2; j++) {
    if (!a[st][j] && !a[st + 1][j]) continue;
    uk = 0;
    if (a[st][j]) b[uk++] = {st, j};
    if (a[st + 1][j]) b[uk++] = {st + 1, j};
    if (uk < 3) b[uk++] = {st, j + 1};
    if (uk < 3) b[uk++] = {st + 1, j + 1};
    add();
  }
}
void f1(int n, int j) {
  for (int i = 0; i < n - 2; i++) {
    if (!a[i][j] && !a[i][j + 1]) continue;
    uk = 0;
    if (a[i][j]) b[uk++] = {i, j};
    if (a[i][j + 1]) b[uk++] = {i, j + 1};
    if (uk < 3) b[uk++] = {i + 1, j};
    if (uk < 3) b[uk++] = {i + 1, j + 1};
    add();
  }
}
void solve() {
  int n, m;
  cin >> n >> m;
  D = 0;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      char c;
      cin >> c;
      a[i][j] = int32_t(c - '0');
    }
  }
  for (int i = 0; i < n; i += 2) {
    if (i + 1 >= n) break;
    f(i, m);
  }
  if (n % 2) f(n - 2, m);
  f1(n, m - 2);
  int k = 0;
  for (int i = n - 2; i < n; i++) {
    for (int j = m - 2; j < m; j++) {
      if (a[i][j]) k++;
    }
  }
  if (k == 1) solve1(n - 2, m - 2);
  if (k == 2) solve2(n - 2, m - 2);
  if (k == 3) solve3(n - 2, m - 2);
  if (k == 4) solve4(n - 2, m - 2);
  cout << D << '\n';
  for (int i = 0; i < D; i++) {
    for (int j = 0; j < 3; j++) {
      cout << ans[i][j].first + 1 << " " << ans[i][j].second + 1 << " ";
    }
    cout << '\n';
  }
}
int32_t main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  srand(time(0));
  int T;
  cin >> T;
  while (T--) solve();
}
