#include <bits/stdc++.h>
using namespace std;
const int MOD = (int)1e9 + 7;
long long binPow(long long a, long long b) {
  if (b == 0) return 1;
  long long ans = binPow(a, b / 2);
  ans = ans * ans % MOD;
  if (b % 2) ans = ans * a % MOD;
  return ans;
}
void process(vector<string>& a, vector<pair<int, int> >& q) {
  for (auto i : q) {
    a[i.first][i.second] = (a[i.first][i.second] == '0' ? '1' : '0');
  }
}
void solve() {
  int n, m;
  cin >> n >> m;
  vector<string> a(n);
  for (int i = 0; i < n; ++i) cin >> a[i];
  vector<vector<pair<int, int> > > all;
  for (int i = 0; i < n; i += 2) {
    bool kek = false;
    if (i + 1 == n) {
      --i;
      kek = true;
    }
    for (int j = 0; j < m - 1; ++j) {
      vector<pair<int, int> > q;
      if (a[i][j] == '1') q.push_back({i, j});
      if (a[i + 1][j] == '1') q.push_back({i + 1, j});
      if (q.size() == 2)
        q.push_back({i, j + 1});
      else {
        q.push_back({i, j + 1});
        q.push_back({i + 1, j + 1});
      }
      if (q.size() == 3) {
        all.push_back(q);
        process(a, q);
      }
    }
    if (a[i][m - 1] == '1' && a[i + 1][m - 1] == '1') {
      vector<pair<int, int> > q;
      q.push_back({i, m - 1});
      q.push_back({i, m - 2});
      q.push_back({i + 1, m - 2});
      all.push_back(q);
      process(a, q);
      q.clear();
      q.push_back({i + 1, m - 1});
      q.push_back({i, m - 2});
      q.push_back({i + 1, m - 2});
      all.push_back(q);
      process(a, q);
      q.clear();
    } else if (a[i][m - 1] == '1' && a[i + 1][m - 1] == '0') {
      vector<pair<int, int> > q;
      q.push_back({i, m - 1});
      q.push_back({i + 1, m - 1});
      q.push_back({i + 1, m - 2});
      all.push_back(q);
      process(a, q);
      q.clear();
      q.push_back({i + 1, m - 1});
      q.push_back({i, m - 1});
      q.push_back({i, m - 2});
      all.push_back(q);
      process(a, q);
      q.clear();
      q.push_back({i, m - 1});
      q.push_back({i, m - 2});
      q.push_back({i + 1, m - 2});
      all.push_back(q);
      process(a, q);
      q.clear();
    } else if (a[i][m - 1] == '0' && a[i + 1][m - 1] == '1') {
      vector<pair<int, int> > q;
      q.push_back({i + 1, m - 1});
      q.push_back({i, m - 1});
      q.push_back({i, m - 2});
      all.push_back(q);
      process(a, q);
      q.clear();
      q.push_back({i, m - 1});
      q.push_back({i + 1, m - 1});
      q.push_back({i + 1, m - 2});
      all.push_back(q);
      process(a, q);
      q.clear();
      q.push_back({i + 1, m - 1});
      q.push_back({i + 1, m - 2});
      q.push_back({i, m - 2});
      all.push_back(q);
      process(a, q);
      q.clear();
    }
    if (kek == true) break;
  }
  cout << all.size() << "\n";
  for (auto i : all) {
    for (auto j : i) cout << j.first + 1 << " " << j.second + 1 << " ";
    cout << "\n";
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  srand(time(0));
  int numberTests = 1;
  cin >> numberTests;
  while (numberTests--) {
    solve();
  }
}
