#include <bits/stdc++.h>
using namespace std;
const int N = 1e3 + 5;
int n, m, k;
int a[N][N];
pair<int, int> ans[N * N * 3];
int cnt(int x, int y) {
  return a[x][y] + a[x][y + 1] + a[x + 1][y] + a[x + 1][y + 1];
}
inline void change(int x, int y) { a[x][y] ^= 1, ans[++k] = make_pair(x, y); }
void p3(int x, int y) {
  int kx, ky;
  for (int i = x; i <= x + 1; ++i)
    for (int j = y; j <= y + 1; ++j)
      if (a[i][j]) change(i, j);
}
void p2(int x, int y) {
  if (a[x][y] == a[x + 1][y + 1]) {
    if (a[x][y]) {
      change(x, y);
      change(x, y + 1);
      change(x + 1, y);
    } else {
      change(x, y);
      change(x, y + 1);
      change(x + 1, y + 1);
    }
  } else {
    if (a[x][y] + a[x + 1][y] == 0) {
      change(x, y);
      change(x + 1, y);
      change(x, y + 1);
    }
    if (a[x][y + 1] + a[x + 1][y + 1] == 0) {
      change(x, y + 1);
      change(x + 1, y + 1);
      change(x, y);
    }
    if (a[x][y] + a[x][y + 1] == 0) {
      change(x, y);
      change(x, y + 1);
      change(x + 1, y);
    }
    if (a[x + 1][y] + a[x + 1][y + 1] == 0) {
      change(x + 1, y);
      change(x + 1, y + 1);
      change(x, y);
    }
  }
  p3(x, y);
}
void p1(int x, int y) {
  int t = 2;
  for (int i = x; i <= x + 1; ++i)
    for (int j = y; j <= y + 1; ++j)
      if (t && !a[i][j])
        change(i, j), t--;
      else if (a[i][j])
        change(i, j);
  p2(x, y);
}
void p4(int x, int y) {
  change(x, y);
  change(x, y + 1);
  change(x + 1, y);
  p1(x, y);
}
void solve() {
  k = 0;
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; ++i)
    for (int j = 1; j <= m; ++j) scanf("%1d", &a[i][j]);
  for (int i = 1; i < n; ++i)
    for (int j = 1; j < m; ++j) {
      int c = cnt(i, j);
      if (c == 1) p1(i, j);
      if (c == 2) p2(i, j);
      if (c == 3) p3(i, j);
      if (c == 4) p4(i, j);
    }
  printf("%d\n", k / 3);
  for (int i = 1; i <= k; ++i)
    printf("%d %d%c", ans[i].first, ans[i].second, i % 3 ? ' ' : '\n');
}
int main() {
  int _;
  scanf("%d", &_);
  while (_--) solve();
  return 0;
}
