#include <bits/stdc++.h>
using std::cin;
using std::cout;
using std::string;
using std::vector;
int main() {
  std::ios::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);
  int T;
  for (cin >> T; T--;) {
    int n, m;
    cin >> n >> m;
    vector<string> matrix(n);
    for (auto &str : matrix) cin >> str;
    vector<std::pair<int, int>> ans;
    auto flip = [&](int x, int y) {
      ans.emplace_back(x + 1, y + 1);
      if (matrix[x][y] == '0')
        matrix[x][y] = '1';
      else
        matrix[x][y] = '0';
    };
    for (int i = 0; i < n - 2; ++i) {
      for (int j = 0; j < m - 1; ++j) {
        if (matrix[i][j] == '0' && matrix[i][j + 1] == '0') continue;
        if (matrix[i][j] == '1' && matrix[i][j + 1] == '1') {
          flip(i, j);
          flip(i, j + 1);
          flip(i + 1, j);
        } else if (matrix[i][j] == '1') {
          flip(i, j);
          flip(i + 1, j);
          flip(i + 1, j + 1);
        } else {
          flip(i, j + 1);
          flip(i + 1, j);
          flip(i + 1, j + 1);
        }
      }
    }
    for (int j = 0; j < m - 1; ++j) {
      if (matrix[n - 2][j] == '0' && matrix[n - 1][j] == '0') continue;
      if (matrix[n - 2][j] == '1' && matrix[n - 1][j] == '1') {
        flip(n - 2, j);
        flip(n - 1, j);
        flip(n - 2, j + 1);
      } else if (matrix[n - 2][j] == '1') {
        flip(n - 2, j);
        flip(n - 2, j + 1);
        flip(n - 1, j + 1);
      } else {
        flip(n - 1, j);
        flip(n - 2, j + 1);
        flip(n - 1, j + 1);
      }
    }
    if (matrix[n - 2][m - 1] == '1' && matrix[n - 1][m - 1] == '1') {
      flip(n - 2, m - 1);
      flip(n - 2, m - 2);
      flip(n - 1, m - 2);
      flip(n - 2, m - 2);
      flip(n - 1, m - 2);
      flip(n - 1, m - 1);
    } else if (matrix[n - 2][m - 1] == '0' && matrix[n - 1][m - 1] == '1') {
      flip(n - 2, m - 2);
      flip(n - 2, m - 1);
      flip(n - 1, m - 1);
      flip(n - 2, m - 2);
      flip(n - 1, m - 2);
      flip(n - 1, m - 1);
      flip(n - 2, m - 1);
      flip(n - 1, m - 2);
      flip(n - 1, m - 1);
    } else if (matrix[n - 2][m - 1] == '1' && matrix[n - 1][m - 1] == '0') {
      flip(n - 1, m - 2);
      flip(n - 1, m - 1);
      flip(n - 2, m - 1);
      flip(n - 1, m - 2);
      flip(n - 2, m - 1);
      flip(n - 2, m - 2);
      flip(n - 2, m - 2);
      flip(n - 2, m - 1);
      flip(n - 1, m - 1);
    }
    cout << (int)ans.size() / 3 << '\n';
    for (int i = 0; i < ans.size(); i += 3) {
      cout << ans[i].first << ' ' << ans[i].second << ' ';
      cout << ans[i + 1].first << ' ' << ans[i + 1].second << ' ';
      cout << ans[i + 2].first << ' ' << ans[i + 2].second << '\n';
    }
  }
}
