#include <bits/stdc++.h>
using namespace std;
int main() {
  std::cin.tie(0);
  std::ios::sync_with_stdio(false);
  int t;
  cin >> t;
  while (t--) {
    int n, m;
    cin >> n >> m;
    vector<vector<int>> tab(n, vector<int>(m));
    vector<vector<int>> res(0, vector<int>(6));
    for (int i = 0; i < n; ++i) {
      string s;
      cin >> s;
      for (int j = 0; j < m; ++j) {
        tab[i][j] = (int)s[j] - '0';
      }
    }
    if (n % 2 == 1) {
      if (m % 2 == 1) {
        if (tab[n - 1][m - 1] == 1) {
          vector<int> t = {n - 1, m - 2, n - 1, m - 1, n - 2, m - 1};
          res.push_back(t);
          for (int l = 0; l < 6; l += 2) tab[t[l]][t[l + 1]] ^= 1;
        }
      }
      for (int j = 0; j < m; j += 2) {
        if (j + 1 >= m) continue;
        if (tab[n - 1][j] | tab[n - 1][j + 1] == 1) {
          vector<int> t;
          for (int l = j; l <= j + 1; ++l) {
            if (tab[n - 1][l] == 1) {
              t.push_back(n - 1);
              t.push_back(l);
            }
          }
          for (int l = j; l <= j + 1; ++l) {
            if (t.size() < 6) {
              t.push_back(n - 2);
              t.push_back(l);
              tab[n - 2][l] ^= 1;
            }
          }
          res.push_back(t);
        }
      }
    }
    for (int i = 0; i < n; i += 2) {
      if (i + 1 >= n) continue;
      for (int j = 0; j < m - 2; j++) {
        if (tab[i][j] | tab[i + 1][j] == 1) {
          vector<int> t;
          for (int l = i; l <= i + 1; ++l) {
            if (tab[l][j] == 1) {
              t.push_back(l);
              t.push_back(j);
            }
          }
          for (int l = i; l <= i + 1; ++l) {
            if (t.size() < 6) {
              t.push_back(l);
              t.push_back(j + 1);
              tab[l][j + 1] ^= 1;
            }
          }
          res.push_back(t);
        }
      }
      vector<int> p = {0, 0, 0, 0};
      int num = -1;
      int l_x = i, r_x = i + 1, l_y = m - 2, r_y = m - 1;
      for (int x = l_x; x <= r_x; ++x)
        for (int y = l_y; y <= r_y; ++y) {
          num++;
          if (tab[x][y] == 1) {
            p[num] ^= 1;
            if (x - 1 >= l_x) p[num - 2] ^= 1;
            if (x + 1 <= r_x) p[num + 2] ^= 1;
            if (y - 1 >= l_y) p[num - 1] ^= 1;
            if (y + 1 <= r_y) p[num + 1] ^= 1;
          }
        }
      int x = l_x, y = l_y;
      vector<vector<int>> plus = {{0, 0}, {0, 1}, {1, -1}, {0, 1}};
      vector<vector<int>> sdvig = {{-1, 0}, {0, 1}, {1, 0}, {0, -1}};
      for (int q = 0; q < 4; ++q) {
        x += plus[q][0];
        y += plus[q][1];
        if (p[q] == 0) continue;
        vector<int> t;
        t.push_back(x);
        t.push_back(y);
        for (int z = 0; z < 4; ++z) {
          if (x + sdvig[z][0] >= l_x && x + sdvig[z][0] <= r_x &&
              y + sdvig[z][1] >= l_y && y + sdvig[z][1] <= r_y) {
            t.push_back(x + sdvig[z][0]);
            t.push_back(y + sdvig[z][1]);
          }
        }
        res.push_back(t);
      }
    }
    cout << res.size() << endl;
    for (int i = 0; i < res.size(); ++i) {
      for (int j = 0; j < 6; ++j) {
        cout << res[i][j] + 1 << " ";
      }
      cout << endl;
    }
  }
}
