#include <bits/stdc++.h>
using namespace std;
vector<pair<int, int>> p;
void pr(pair<int, int> a) { p.push_back(a); }
int main() {
  int t;
  cin >> t;
  while (t--) {
    p.clear();
    int n, m;
    cin >> n >> m;
    string s[n];
    for (int i = 0; i < n; i++) cin >> s[i];
    for (int i = 0; i < n - 2; i++) {
      for (int j = 0; j < m; j++) {
        if (s[i][j] == '0') continue;
        if (j == m - 1) {
          p.push_back({i + 1, j + 1});
          p.push_back({i + 2, j + 1});
          p.push_back({i + 2, j});
          s[i][j] = (s[i][j] - 48 + 1) % 2 + 48;
          s[i + 1][j] = (s[i + 1][j] - 48 + 1) % 2 + 48;
          s[i + 1][j - 1] = (s[i + 1][j - 1] - 48 + 1) % 2 + 48;
        } else {
          p.push_back({i + 1, j + 1});
          p.push_back({i + 2, j + 1});
          p.push_back({i + 2, j + 2});
          s[i][j] = (s[i][j] - 48 + 1) % 2 + 48;
          s[i + 1][j] = (s[i + 1][j] - 48 + 1) % 2 + 48;
          s[i + 1][j + 1] = (s[i + 1][j + 1] - 48 + 1) % 2 + 48;
        }
      }
    }
    for (int i = n - 2; i < n - 1; i++) {
      for (int j = 0; j < m - 1; j += 2) {
        vector<pair<int, int>> z;
        vector<pair<int, int>> o;
        for (int x = 0; x < 2; x++) {
          for (int y = 0; y < 2; y++) {
            if (s[i + x][j + y] == '0') {
              z.push_back({i + x + 1, j + y + 1});
            }
            if (s[i + x][j + y] == '1') {
              o.push_back({i + x + 1, j + y + 1});
            }
          }
        }
        if (z.size() == 3) {
          pr(z[0]);
          pr(z[1]);
          pr(o[0]);
          pr(z[2]);
          pr(o[0]);
          pr(z[1]);
          pr(z[0]);
          pr(o[0]);
          pr(z[2]);
        }
        if (z.size() == 2) {
          pr(z[0]);
          pr(z[1]);
          pr(o[0]);
          pr(z[0]);
          pr(z[1]);
          pr(o[1]);
        }
        if (z.size() == 1) {
          pr(o[0]);
          pr(o[1]);
          pr(o[2]);
        }
        if (z.size() == 0) {
          pr(o[0]);
          pr(o[1]);
          pr(o[2]);
          pr(o[1]);
          pr(o[2]);
          pr(o[3]);
          pr(o[0]);
          pr(o[3]);
          pr(o[1]);
          pr(o[0]);
          pr(o[2]);
          pr(o[3]);
        }
        s[i][j] = '0';
        s[i + 1][j] = '0';
        s[i + 1][j + 1] = '0';
        s[i][j + 1] = '0';
      }
    }
    if (m % 2 == 1) {
      int i = n - 2;
      int j = m - 2;
      vector<pair<int, int>> z;
      vector<pair<int, int>> o;
      for (int x = 0; x < 2; x++) {
        for (int y = 0; y < 2; y++) {
          if (s[i + x][j + y] == '0') {
            z.push_back({i + x + 1, j + y + 1});
          }
          if (s[i + x][j + y] == '1') {
            o.push_back({i + x + 1, j + y + 1});
          }
        }
      }
      if (z.size() == 3) {
        pr(z[0]);
        pr(z[1]);
        pr(o[0]);
        pr(z[2]);
        pr(o[0]);
        pr(z[1]);
        pr(z[0]);
        pr(o[0]);
        pr(z[2]);
      }
      if (z.size() == 2) {
        pr(z[0]);
        pr(z[1]);
        pr(o[0]);
        pr(z[0]);
        pr(z[1]);
        pr(o[1]);
      }
      if (z.size() == 1) {
        pr(o[0]);
        pr(o[1]);
        pr(o[2]);
      }
      if (z.size() == 0) {
        pr(o[0]);
        pr(o[1]);
        pr(o[2]);
        pr(o[1]);
        pr(o[2]);
        pr(o[3]);
        pr(o[0]);
        pr(o[3]);
        pr(o[1]);
        pr(o[0]);
        pr(o[2]);
        pr(o[3]);
      }
      s[i][j] = '0';
      s[i + 1][j] = '0';
      s[i + 1][j + 1] = '0';
      s[i][j + 1] = '0';
    }
    cout << p.size() / 3 << endl;
    for (int i = 0; i < p.size(); i += 3) {
      for (int j = 0; j < 3; j++) {
        cout << p[i + j].first << " " << p[i + j].second << " ";
      }
      cout << endl;
    }
  }
}
