#include <bits/stdc++.h>
using namespace std;
const int N = 1e2 + 10;
struct node {
  int x, y, xx, yy, xxx, yyy;
};
int n, m;
int a[N][N];
vector<node> op;
void print(int x, int y) {
  if (x == 1 && y == 1) {
    op.push_back({1, 1, 1, 2, 2, 1});
    op.push_back({1, 1, 1, 2, 2, 2});
    op.push_back({1, 1, 2, 1, 2, 2});
  } else if (x == 1 && y == 2) {
    op.push_back({1, 1, 1, 2, 2, 2});
    op.push_back({1, 1, 1, 2, 2, 1});
    op.push_back({1, 2, 2, 1, 2, 2});
  } else if (x == 2 && y == 1) {
    op.push_back({1, 1, 2, 1, 2, 2});
    op.push_back({1, 1, 1, 2, 2, 1});
    op.push_back({1, 2, 2, 1, 2, 2});
  } else if (x == 2 && y == 2) {
    op.push_back({1, 2, 2, 1, 2, 2});
    op.push_back({1, 1, 1, 2, 2, 2});
    op.push_back({1, 1, 2, 1, 2, 2});
  }
}
int main() {
  int _;
  cin >> _;
  while (_--) {
    op.clear();
    cin >> n >> m;
    for (int i = 1; i <= n; i++) {
      for (int j = 1; j <= m; j++) {
        char c;
        scanf(" %c", &c);
        if (c == '1')
          a[i][j] = 1;
        else
          a[i][j] = 0;
      }
    }
    for (int i = n; i >= 3; i--) {
      for (int j = 1; j <= m; j++) {
        if (a[i][j]) {
          if (j == 1) {
            op.push_back({i, j, i - 1, j, i - 1, j + 1});
            a[i][j] ^= 1;
            a[i - 1][j] ^= 1;
            a[i - 1][j + 1] ^= 1;
          } else {
            op.push_back({i, j, i - 1, j, i - 1, j - 1});
            a[i][j] ^= 1;
            a[i - 1][j] ^= 1;
            a[i - 1][j - 1] ^= 1;
          }
        }
      }
    }
    for (int j = m; j >= 3; j--) {
      for (int i = 1; i <= 2; i++) {
        if (a[i][j]) {
          op.push_back({i, j, 1, j - 1, 2, j - 1});
          a[i][j] ^= 1;
          a[1][j - 1] ^= 1;
          a[2][j - 1] ^= 1;
        }
      }
    }
    int cnt = 0;
    for (int i = 1; i <= 2; i++) {
      for (int j = 1; j <= 2; j++) {
        if (a[i][j]) cnt++;
      }
    }
    if (cnt == 1) {
      for (int i = 1; i <= 2; i++) {
        for (int j = 1; j <= 2; j++) {
          if (a[i][j]) {
            print(i, j);
            break;
          }
        }
      }
    } else if (cnt == 2) {
      int x, y;
      vector<int> v;
      for (int i = 1; i <= 2; i++) {
        for (int j = 1; j <= 2; j++) {
          if (a[i][j]) {
            v.push_back(i);
            v.push_back(j);
          } else {
            x = i, y = j;
          }
        }
      }
      v.push_back(x);
      v.push_back(y);
      op.push_back({v[0], v[1], v[2], v[3], v[4], v[5]});
      print(x, y);
    } else if (cnt == 3) {
      vector<int> v;
      for (int i = 1; i <= 2; i++) {
        for (int j = 1; j <= 2; j++) {
          if (a[i][j]) {
            v.push_back(i);
            v.push_back(j);
          }
        }
      }
      op.push_back({v[0], v[1], v[2], v[3], v[4], v[5]});
    } else if (cnt == 4) {
      op.push_back({1, 1, 1, 2, 2, 1});
      print(2, 2);
    }
    cout << op.size() << "\n";
    for (int i = 0; i < op.size(); i++) {
      node t = op[i];
      cout << t.x << " " << t.y << " " << t.xx << " " << t.yy << " " << t.xxx
           << " " << t.yyy << "\n";
    }
  }
  return 0;
}
