#include <bits/stdc++.h>
using namespace std;
int tc;
int n, m;
string a[105];
vector<vector<pair<int, int>>> ans;
int dx[4] = {0, 0, 1, 1};
int dy[4] = {0, 1, 0, 1};
void insert(pair<int, int> x, pair<int, int> y, pair<int, int> z) {
  ans.push_back(vector<pair<int, int>>({x, y, z}));
  a[x.first][x.second] = (1 - (a[x.first][x.second] - '0')) + '0';
  a[y.first][y.second] = (1 - (a[y.first][y.second] - '0')) + '0';
  a[z.first][z.second] = (1 - (a[z.first][z.second] - '0')) + '0';
}
void work(int i, int j, int cur) {
  if (i == n - 2 && j == m - 2) {
    if (__builtin_popcount(cur) == 4) {
      insert({i, j}, {i, j + 1}, {i + 1, j});
      cur = cur ^ 7;
    }
    if (__builtin_popcount(cur) == 1) {
      int id = __builtin_ctz(cur);
      int id1 = 0;
      while ((cur & (1 << id1)) || id1 == id) id1++;
      int id2 = 0;
      while ((cur & (1 << id2)) || id2 == id || id2 == id1) id2++;
      insert({i + dx[id], j + dy[id]}, {i + dx[id1], j + dy[id1]},
             {i + dx[id2], j + dy[id2]});
      cur = cur ^ (1 << id) ^ (1 << id1) ^ (1 << id2);
    }
    if (__builtin_popcount(cur) == 2) {
      int id = __builtin_ctz(cur);
      int id1 = 0;
      while (cur & (1 << id1)) id1++;
      int id2 = 0;
      while (id2 == id1 || (cur & (1 << id2))) id2++;
      insert({i + dx[id], j + dy[id]}, {i + dx[id1], j + dy[id1]},
             {i + dx[id2], j + dy[id2]});
      cur = cur ^ (1 << id) ^ (1 << id1) ^ (1 << id2);
    }
    if (__builtin_popcount(cur) == 3) {
      int id1 = __builtin_ctz(cur);
      cur ^= (1 << id1);
      int id2 = __builtin_ctz(cur);
      cur ^= (1 << id2);
      int id3 = __builtin_ctz(cur);
      cur ^= (1 << id3);
      insert({i + dx[id1], j + dy[id1]}, {i + dx[id2], j + dy[id2]},
             {i + dx[id3], j + dy[id3]});
    }
  } else if (j == m - 2) {
    if ((cur & 3) == 0) return;
    int id1, id2, id3;
    if ((cur & 3) == 1) {
      id1 = 0;
      id2 = 2;
      id3 = 3;
    }
    if ((cur & 3) == 2) {
      id1 = 1;
      id2 = 2;
      id3 = 3;
    }
    if ((cur & 3) == 3) {
      id1 = 0;
      id2 = 1;
      id3 = 2;
    }
    insert({i + dx[id1], j + dy[id1]}, {i + dx[id2], j + dy[id2]},
           {i + dx[id3], j + dy[id3]});
  } else if (i == n - 2) {
    if ((cur & 5) == 0) return;
    int id1, id2, id3;
    if ((cur & 5) == 1) {
      id1 = 0;
      id2 = 1;
      id3 = 3;
    }
    if ((cur & 5) == 4) {
      id1 = 2;
      id2 = 1;
      id3 = 3;
    }
    if ((cur & 5) == 5) {
      id1 = 0;
      id2 = 2;
      id3 = 3;
    }
    insert({i + dx[id1], j + dy[id1]}, {i + dx[id2], j + dy[id2]},
           {i + dx[id3], j + dy[id3]});
  } else {
    if ((cur & 1) == 0) return;
    int id1 = 0, id2 = 1, id3 = 2;
    insert({i + dx[id1], j + dy[id1]}, {i + dx[id2], j + dy[id2]},
           {i + dx[id3], j + dy[id3]});
  }
}
void solve() {
  for (int i = 0; i < n - 1; i++) {
    for (int j = 0; j < m - 1; j++) {
      int cur = ((a[i][j] - '0') << 0) | ((a[i][j + 1] - '0') << 1) |
                ((a[i + 1][j] - '0') << 2) | ((a[i + 1][j + 1] - '0') << 3);
      work(i, j, cur);
    }
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> tc;
  while (tc--) {
    cin >> n >> m;
    for (int i = 0; i < n; i++) {
      cin >> a[i];
    }
    ans.clear();
    solve();
    cout << ans.size() << "\n";
    for (int i = 0; i < ans.size(); i++) {
      for (pair<int, int> it : ans[i]) {
        cout << it.first + 1 << " " << it.second + 1 << " ";
      }
      cout << "\n";
    }
  }
  return 0;
}
