#include <bits/stdc++.h>
const int maxn = 1e6 + 10;
const int mod = 998244353;
using namespace std;
template <typename T1, typename T2>
void ckmin(T1 &a, T2 b) {
  if (a > b) a = b;
}
template <typename T1, typename T2>
void ckmax(T1 &a, T2 b) {
  if (a < b) a = b;
}
template <typename T1, typename T2>
void addmo(T1 &a, T2 b) {
  a += b;
  if (a >= mod) a -= mod;
}
int n, m, a[105][105], hhh;
vector<vector<pair<int, int>>> v;
void pbb(int a, int b, int c, int d, int e, int f) {
  vector<pair<int, int>> tt;
  tt.push_back({a, b});
  tt.push_back({c, d});
  tt.push_back({e, f});
  v.push_back(tt);
}
void solve() {
  v.clear();
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++) scanf("%1d", &a[i][j]);
  if (m % 2 == 1) {
    for (int i = 1; i < n; i += 2) {
      if (a[i][m] == 1 || a[i + 1][m] == 1) {
        if (a[i][m] == 1 && a[i + 1][m] == 1) {
          pbb(i, m, i + 1, m, i, m - 1);
          a[i][m - 1] ^= 1;
          hhh++, hhh++, hhh++;
        } else if (a[i][m] == 1) {
          pbb(i, m, i, m - 1, i + 1, m - 1);
          a[i][m - 1] ^= 1;
          hhh++, hhh++, hhh++;
          a[i + 1][m - 1] ^= 1;
        } else {
          pbb(i + 1, m, i, m - 1, i + 1, m - 1);
          a[i][m - 1] ^= 1;
          hhh++, hhh++, hhh++;
          a[i + 1][m - 1] ^= 1;
        }
        a[i][m] = 0;
        a[i + 1][m] = 0;
      }
    }
  }
  if (n % 2 == 1) {
    for (int i = 1; i < m; i += 2) {
      if (a[n][i] == 1 || a[n][i + 1] == 1) {
        if (a[n][i] == 1 && a[n][i + 1] == 1) {
          pbb(n, i, n, i + 1, n - 1, i);
          a[n - 1][i] ^= 1;
          hhh++, hhh++, hhh++;
        } else if (a[n][i] == 1) {
          pbb(n, i, n - 1, i, n - 1, i + 1);
          a[n - 1][i] ^= 1;
          a[n - 1][i + 1] ^= 1;
          hhh++, hhh++, hhh++;
        } else {
          pbb(n, i + 1, n - 1, i, n - 1, i + 1);
          a[n - 1][i] ^= 1;
          a[n - 1][i + 1] ^= 1;
        }
        a[n][i] = 0;
        hhh++, hhh++, hhh++;
        a[n][i + 1] = 0;
      }
    }
  }
  if (n % 2 == 1 && m % 2 == 1) {
    if (a[n][m] == 1) {
      a[n - 1][m - 1] ^= 1;
      hhh++, hhh++, hhh++;
      pbb(n, m, n - 1, m, n, m - 1);
      pbb(n - 1, m - 1, n - 1, m, n, m - 1);
    }
  }
  n -= n % 2;
  m -= m % 2;
  for (int i = 1; i <= n; i += 2) {
    for (int j = 1; j <= m; j += 2) {
      int cnt = 0;
      hhh++, hhh++, hhh++;
      for (int x = i; x <= i + 1; x++)
        for (int y = j; y <= j + 1; y++) {
          cnt += a[x][y];
        }
      if (cnt == 4) {
        hhh++, hhh++, hhh++;
        pbb(i, j, i + 1, j, i, j + 1);
        pbb(i + 1, j + 1, i + 1, j, i, j + 1);
        pbb(i, j, i + 1, j, i + 1, j + 1);
        pbb(i, j, i, j + 1, i + 1, j + 1);
      } else {
        queue<pair<int, int>> one;
        queue<pair<int, int>> zero;
        for (int x = i; x <= i + 1; x++)
          for (int y = j; y <= j + 1; y++) {
            if (a[x][y] == 1)
              one.push({x, y});
            else
              zero.push({x, y});
            hhh++, hhh++, hhh++;
          }
        if (one.size() == 0) continue;
        while (1) {
          if (one.size() < 3) {
            pair<int, int> a = one.front();
            zero.push(one.front());
            one.pop();
            hhh++, hhh++, hhh++;
            pair<int, int> b = zero.front();
            one.push(zero.front());
            zero.pop();
            pair<int, int> c = zero.front();
            one.push(zero.front());
            zero.pop();
            pbb(a.first, a.second, b.first, b.second, c.first, c.second);
          } else if (one.size() == 3) {
            vector<pair<int, int>> tt;
            while (one.size()) {
              tt.push_back({one.front()});
              one.pop();
            }
            v.push_back(tt);
            hhh++, hhh++, hhh++;
            break;
          }
        }
      }
    }
  }
  printf("%d\n", v.size());
  for (vector<pair<int, int>> i : v) {
    for (pair<int, int> j : i) {
      printf("%d %d ", j.first, j.second);
    }
    printf("\n");
  }
}
signed main() {
  int T;
  scanf("%d", &T);
  while (T--) solve();
  return 0;
}
