#include <bits/stdc++.h>
int dr[] = {2, 2, -2, -2, 1, -1, 1, -1};
int dc[] = {1, -1, 1, -1, 2, 2, -2, -2};
int dr1[] = {0, 0, 1, 1, 1, -1, -1, -1};
int dc1[] = {1, -1, 1, 0, -1, 0, 1, -1};
int dr2[] = {0, 0, 1, -1};
int dc2[] = {1, -1, 0, 0};
using namespace std;
vector<pair<long long, long long> > ans;
long long a[1005][1005];
void get3(long long x, long long y) {
  long long i, j;
  for (i = 0; i < 2; i++) {
    for (j = 0; j < 2; j++) {
      if (a[x + i][y + j] == 0) continue;
      ans.push_back({x + i, y + j});
      a[x + i][y + j] ^= 1;
    }
  }
}
void get2(long long x, long long y) {
  long long i, j;
  long long f = 0;
  for (i = 0; i < 2; i++) {
    for (j = 0; j < 2; j++) {
      long long p = a[x + i][y + j];
      if (p == 1 && f == 1) continue;
      ans.push_back({x + i, y + j});
      if (p == 1) f = 1;
      a[x + i][y + j] ^= 1;
    }
  }
  get3(x, y);
}
void get1(long long x, long long y) {
  long long i, j;
  long long cn = 0;
  for (i = 0; i < 2; i++) {
    for (j = 0; j < 2; j++) {
      if (a[x + i][y + j] == 0 && cn == 2) continue;
      if (a[x + i][y + j] == 0) cn++;
      a[x + i][y + j] ^= 1;
      ans.push_back({x + i, y + j});
    }
  }
  get2(x, y);
}
void get4(long long x, long long y) {
  long long i, j;
  a[x][y] = a[x][y + 1] = a[x + 1][y] = 0;
  ans.push_back({x, y});
  ans.push_back({x, y + 1});
  ans.push_back({x + 1, y});
  get1(x, y);
}
int main() {
  long long n, m, i, j, tc, w, q, x, y;
  cin >> tc;
  while (tc--) {
    cin >> n >> m;
    long long cn = 0;
    for (i = 1; i <= n; i++) {
      for (j = 1; j <= m; j++) {
        char ch;
        cin >> ch;
        a[i][j] = ch - '0';
        cn += a[i][j];
      }
    }
    ans.clear();
    for (i = 1; i <= n - 1; i += 2) {
      for (j = 1; j <= m - 1; j += 2) {
        long long cn = 0;
        cn = a[i][j] + a[i][j + 1] + a[i + 1][j] + a[i + 1][j + 1];
        if (cn == 1) get1(i, j);
        if (cn == 2) get2(i, j);
        if (cn == 3) get3(i, j);
        if (cn == 4) get4(i, j);
      }
    }
    if (n % 2 == 1) {
      for (i = 1; i <= m - 1; i += 2) {
        long long cn = 0;
        cn = a[n - 1][i] + a[n - 1][i + 1] + a[n][i] + a[n][i + 1];
        if (cn == 1) get1(n - 1, i);
        if (cn == 2) get2(n - 1, i);
        if (cn == 3) get3(n - 1, i);
        if (cn == 4) get4(n - 1, i);
      }
    }
    if (m % 2 == 1) {
      for (i = 1; i <= n - 1; i += 2) {
        long long cn = 0;
        cn = a[i][m - 1] + a[i][m] + a[i + 1][m - 1] + a[i + 1][m];
        if (cn == 1) get1(i, m - 1);
        if (cn == 2) get2(i, m - 1);
        if (cn == 3) get3(i, m - 1);
        if (cn == 4) get4(i, m - 1);
      }
    }
    cn = 0;
    for (i = 0; i < 2; i++) {
      for (j = 0; j < 2; j++) {
        cn += a[n - i][m - j];
      }
    }
    if (cn == 1) get1(n - 1, m - 1);
    if (cn == 2) get2(n - 1, m - 1);
    if (cn == 3) get3(n - 1, m - 1);
    if (cn == 4) get4(n - 1, m - 1);
    long long p = ans.size() / 3;
    if ((ans.size() % 3)) p++;
    cout << p << endl;
    for (i = 0; i < ans.size(); i += 3) {
      cout << ans[i].first << " " << ans[i].second << " " << ans[i + 1].first
           << " " << ans[i + 1].second << " " << ans[i + 2].first << " "
           << ans[i + 2].second << endl;
    }
  }
  return 0;
}
