#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ld = long double;
using vl = vector<ll>;
template <class T>
using vc = vector<T>;
template <class T>
using vvc = vector<vector<T>>;
template <class T1, class T2>
inline bool chmax(T1 &a, const T2 &b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T1, class T2>
inline bool chmin(T1 &a, const T2 &b) {
  if (b < a) {
    a = b;
    return 1;
  }
  return 0;
}
struct init {
  init() {
    cin.tie(0);
    ios::sync_with_stdio(false);
    cout << fixed << setprecision(15);
  }
} init_;
const ll INF = 4e18;
const ld EPS = 1e-11;
const ld PI = acos(-1.0L);
const ll MOD = 1e9 + 7;
void allClear(vl s1, vl s2, ll i, ll j, vvc<ll> &E) {
  ll cnt = s1[0] + s1[1] + s2[0] + s2[1];
  vvc<ll> A = {{i, j, i, j + 1, i + 1, j + 1},
               {i, j + 1, i + 1, j + 1, i + 1, j},
               {i, j, i + 1, j, i + 1, j + 1},
               {i, j, i + 1, j, i, j + 1}};
  if (cnt == 0) {
    return;
  } else if (cnt == 1) {
    if (s1[0]) {
      E.emplace_back(A[0]), E.emplace_back(A[2]), E.emplace_back(A[3]);
    } else if (s1[1]) {
      E.emplace_back(A[0]), E.emplace_back(A[1]), E.emplace_back(A[3]);
    } else if (s2[0]) {
      E.emplace_back(A[1]), E.emplace_back(A[2]), E.emplace_back(A[3]);
    } else {
      E.emplace_back(A[0]), E.emplace_back(A[1]), E.emplace_back(A[2]);
    }
  } else if (cnt == 2) {
    if (s1[0] and s1[1]) {
      E.emplace_back(A[1]), E.emplace_back(A[2]);
    } else if (s1[0] and s2[0]) {
      E.emplace_back(A[0]), E.emplace_back(A[1]);
    } else if (s1[1] and s2[1]) {
      E.emplace_back(A[2]), E.emplace_back(A[3]);
    } else if (s2[0] and s2[1]) {
      E.emplace_back(A[0]), E.emplace_back(A[3]);
    } else if (s1[0] and s2[1]) {
      E.emplace_back(A[1]), E.emplace_back(A[3]);
    } else {
      E.emplace_back(A[0]), E.emplace_back(A[2]);
    }
  } else if (cnt == 3) {
    if (s1[1] == 0) {
      E.emplace_back(A[2]);
    } else if (s2[0] == 0) {
      E.emplace_back(A[0]);
    } else if (s2[1] == 0) {
      E.emplace_back(A[3]);
    } else {
      E.emplace_back(A[1]);
    }
  } else {
    for (ll i = 0; i < (4); i++) E.emplace_back(A[i]);
  }
}
void solve() {
  ll N, M;
  cin >> N >> M;
  vc<string> S(N);
  for (ll i = 0; i < (N); i++) cin >> S[i];
  vvc<ll> T(N, vl(M));
  for (ll i = 0; i < (N); i++)
    for (ll j = 0; j < (M); j++) T[i][j] = (S[i][j] == '1');
  vvc<ll> ans;
  for (ll i = 0; i < (N - 1); i++) {
    for (ll j = 0; j < (M - 1); j++) {
      vvc<ll> A = {{i, j, i, j + 1, i + 1, j + 1},
                   {i, j + 1, i + 1, j + 1, i + 1, j},
                   {i, j, i + 1, j, i + 1, j + 1},
                   {i, j, i + 1, j, i, j + 1}};
      if (i == N - 2 and j == M - 2) {
        vl s1 = {T[i][j], T[i][j + 1]}, s2 = {T[i + 1][j], T[i + 1][j + 1]};
        allClear(s1, s2, i, j, ans);
      } else if (i == N - 2) {
        if (T[i][j] and T[i + 1][j]) {
          ans.emplace_back(A[3]);
          T[i][j] = T[i + 1][j] = 0;
          T[i][j + 1] ^= 1;
        } else if (T[i][j]) {
          ans.emplace_back(A[0]);
          T[i][j] = 0;
          T[i][j + 1] ^= 1, T[i + 1][j + 1] ^= 1;
        } else if (T[i + 1][j]) {
          ans.emplace_back(A[1]);
          T[i + 1][j] = 0;
          T[i][j + 1] ^= 1, T[i + 1][j + 1] ^= 1;
        }
      } else if (j == M - 2) {
        if (T[i][j] and T[i][j + 1]) {
          ans.emplace_back(A[0]);
          T[i][j] = T[i][j + 1] = 0;
          T[i + 1][j + 1] ^= 1;
        } else if (T[i][j]) {
          ans.emplace_back(A[2]);
          T[i][j] = 0;
          T[i + 1][j] ^= 1, T[i + 1][j + 1] ^= 1;
        } else if (T[i][j + 1]) {
          ans.emplace_back(A[1]);
          T[i + 1][j] ^= 1, T[i + 1][j + 1] ^= 1;
        }
      } else if (T[i][j]) {
        ans.emplace_back(A[0]);
        T[i][j] = 0;
        T[i][j + 1] ^= 1, T[i + 1][j + 1] ^= 1;
      }
    }
  }
  cout << ans.size() << '\n';
  for (ll i = 0; i < (ans.size()); i++) {
    for (ll j = 0; j < (6); j++) cout << ans[i][j] + 1 << (j == 5 ? '\n' : ' ');
  }
}
int main() {
  ll Q;
  cin >> Q;
  for (ll _ = 0; _ < (Q); _++) solve();
}
