#include <bits/stdc++.h>
using namespace std;
void solve() {
  int n, m;
  cin >> n >> m;
  int arr[n][m];
  for (int i = 0; i < n; i++) {
    string s;
    cin >> s;
    for (int j = 0; j < m; j++) {
      arr[i][j] = s[j] - '0';
    }
  }
  vector<vector<int>> ans;
  for (int i = 0; i < n - 1; i++) {
    for (int j = 0; j < m - 2; j++) {
      if (arr[i][j] == 0 && arr[i + 1][j] != 0) {
        arr[i + 1][j] = 0;
        arr[i + 1][j + 1] = !arr[i + 1][j + 1];
        arr[i][j + 1] = !arr[i][j + 1];
        ans.push_back({i + 1, j, i + 1, j + 1, i, j + 1});
      } else if (arr[i][j] != 0 && arr[i + 1][j] == 0) {
        arr[i][j] = 0;
        arr[i + 1][j + 1] = !arr[i + 1][j + 1];
        arr[i][j + 1] = !arr[i][j + 1];
        ans.push_back({i, j, i + 1, j + 1, i, j + 1});
      } else if (arr[i][j] != 0 && arr[i + 1][j] != 0) {
        arr[i + 1][j] = 0;
        arr[i][j] = 0;
        arr[i][j + 1] = !arr[i][j + 1];
        ans.push_back({i + 1, j, i, j, i, j + 1});
      }
    }
  }
  for (int i = 0; i < n - 2; i++) {
    if (arr[i][m - 2] == 0 && arr[i][m - 1] != 0) {
      arr[i][m - 1] = 0;
      arr[i + 1][m - 1] = !arr[i + 1][m - 1];
      arr[i + 1][m - 2] = !arr[i + 1][m - 2];
      ans.push_back({i, m - 1, i + 1, m - 1, i + 1, m - 2});
    } else if (arr[i][m - 2] != 0 && arr[i][m - 1] == 0) {
      arr[i][m - 2] = 0;
      arr[i + 1][m - 1] = !arr[i + 1][m - 1];
      arr[i + 1][m - 2] = !arr[i + 1][m - 2];
      ans.push_back({i, m - 2, i + 1, m - 1, i + 1, m - 2});
    } else if (arr[i][m - 2] != 0 && arr[i][m - 1] != 0) {
      arr[i][m - 1] = 0;
      arr[i][m - 2] = 0;
      arr[i + 1][m - 2] = !arr[i + 1][m - 2];
      ans.push_back({i, m - 1, i, m - 2, i + 1, m - 2});
    }
  }
  int p = n - 2, q = m - 2;
  int cnt = 0;
  vector<pair<int, int>> ones;
  for (int i = p; i < n; i++) {
    for (int j = q; j < m; j++) {
      ;
      if (arr[i][j] == 1) {
        ones.push_back({i, j});
      }
    }
  };
  if (ones.size() == 4) {
    ans.push_back({ones[3].first, ones[3].second, ones[2].first, ones[2].second,
                   ones[1].first, ones[1].second});
    for (int i = 1; i < 4; i++) {
      arr[ones[i].first][ones[i].second] = 0;
    }
    ones.pop_back();
    ones.pop_back();
    ones.pop_back();
  }
  if (ones.size() == 1) {
    vector<int> a;
    a.push_back(ones[0].first);
    a.push_back(ones[0].second);
    arr[ones[0].first][ones[0].second] = 0;
    ones.pop_back();
    for (int i = p; i < n; i++) {
      for (int j = q; j < m; j++) {
        if (arr[i][j] == 0 && (i != a[0] || j != a[1])) {
          a.push_back(i);
          a.push_back(j);
          arr[i][j] = 1;
          ones.push_back({i, j});
        }
        if (a.size() == 6) break;
      }
      if (a.size() == 6) break;
    }
    ans.push_back(a);
  }
  if (ones.size() == 2) {
    vector<int> a;
    pair<int, int> pai = ones.back();
    ones.pop_back();
    for (int i = p; i < n; i++) {
      for (int j = q; j < m; j++) {
        if (arr[i][j] == 0) {
          a.push_back(i);
          a.push_back(j);
          arr[i][j] = 1;
          ones.push_back({i, j});
        }
      }
    }
    arr[pai.first][pai.second] = 0;
    a.push_back(pai.first);
    a.push_back(pai.second);
    ans.push_back(a);
  }
  if (ones.size() == 3) {
    vector<int> a;
    for (auto x : ones) {
      a.push_back(x.first);
      a.push_back(x.second);
    }
    ans.push_back(a);
  }
  cout << ans.size() << endl;
  for (auto x : ans) {
    for (int i = 0; i < 6; i++) {
      cout << x[i] + 1 << " ";
    }
    cout << endl;
  }
}
int main() {
  int t = 1;
  cin >> t;
  while (t--) {
    solve();
  }
  return 0;
}
