#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const long long mod = 1e9 + 7;
const int N = 105;
char s[N][N], w[N][N];
struct Node {
  int x1, y1, x2, y2, x3, y3;
};
vector<Node> ans;
void add(int x1, int y1, int x2, int y2, int x3, int y3) {
  s[x1][y1] ^= 1;
  s[x2][y2] ^= 1;
  s[x3][y3] ^= 1;
  ans.push_back({x1, y1, x2, y2, x3, y3});
}
int main() {
  int _;
  scanf("%d", &_);
  while (_--) {
    int n, m;
    scanf("%d%d", &n, &m);
    for (int i = 1; i <= n; i++) {
      scanf("%s", s[i] + 1);
    }
    for (int i = 1; i <= n; i++) {
      for (int j = 1; j <= m; j++) {
        w[i][j] = s[i][j];
      }
      w[i][m + 1] = 0;
    }
    ans.clear();
    if (m % 2) {
      for (int i = 1; i <= n; i++) {
        if (s[i][m] == '1') {
          if (i == 1)
            add(i, m, i, m - 1, i + 1, m - 1);
          else
            add(i, m, i, m - 1, i - 1, m - 1);
        }
      }
    }
    if (n % 2) {
      for (int i = 1; i <= m; i++) {
        if (s[n][i] == '1') {
          if (i == 1)
            add(n, i, n - 1, i, n - 1, i + 1);
          else
            add(n, i, n - 1, i, n - 1, i - 1);
        }
      }
    }
    for (int i = 1; i + 1 <= n; i += 2) {
      for (int j = 1; j + 1 <= m; j += 2) {
        vector<pair<int, int> > a, b;
        for (int x = 0; x < 2; x++)
          for (int y = 0; y < 2; y++) {
            if (s[i + x][j + y] == '1')
              a.push_back({i + x, j + y});
            else
              b.push_back({i + x, j + y});
          }
        if (a.size() == 0) {
          ;
        } else if (a.size() == 1) {
          ans.push_back({a[0].first, a[0].second, b[0].first, b[0].second,
                         b[1].first, b[1].second});
          ans.push_back({a[0].first, a[0].second, b[0].first, b[0].second,
                         b[2].first, b[2].second});
          ans.push_back({a[0].first, a[0].second, b[1].first, b[1].second,
                         b[2].first, b[2].second});
        } else if (a.size() == 2) {
          ans.push_back({a[0].first, a[0].second, b[0].first, b[0].second,
                         b[1].first, b[1].second});
          ans.push_back({a[1].first, a[1].second, b[0].first, b[0].second,
                         b[1].first, b[1].second});
        } else if (a.size() == 3) {
          ans.push_back({a[0].first, a[0].second, a[1].first, a[1].second,
                         a[2].first, a[2].second});
        } else {
          ans.push_back({a[0].first, a[0].second, a[1].first, a[1].second,
                         a[2].first, a[2].second});
          ans.push_back({a[0].first, a[0].second, a[1].first, a[1].second,
                         a[3].first, a[3].second});
          ans.push_back({a[0].first, a[0].second, a[3].first, a[3].second,
                         a[2].first, a[2].second});
          ans.push_back({a[1].first, a[1].second, a[3].first, a[3].second,
                         a[2].first, a[2].second});
        }
      }
    }
    printf("%d\n", ans.size());
    for (auto t : ans) {
      printf("%d %d %d %d %d %d\n", t.x1, t.y1, t.x2, t.y2, t.x3, t.y3);
      w[t.x1][t.y1] ^= 1;
      w[t.x2][t.y2] ^= 1;
      w[t.x3][t.y3] ^= 1;
    }
  }
  return 0;
}
