#include <bits/stdc++.h>
using namespace std;
void start() {}
vector<pair<long long, long long>> v, v1;
void one(char x, char y, char z, char w, long long i, long long j) {
  if (x == '1') {
    v.push_back({i + 1, j + 1});
    v.push_back({i + 1, j + 2});
    v.push_back({i + 2, j + 2});
    v.push_back({i + 1, j + 1});
    v.push_back({i + 1, j + 2});
    v.push_back({i + 2, j + 1});
    v.push_back({i + 1, j + 1});
    v.push_back({i + 2, j + 1});
    v.push_back({i + 2, j + 2});
  } else if (y == '1') {
    v.push_back({i + 1, j + 1});
    v.push_back({i + 1, j + 2});
    v.push_back({i + 2, j + 2});
    v.push_back({i + 1, j + 1});
    v.push_back({i + 1, j + 2});
    v.push_back({i + 2, j + 1});
    v.push_back({i + 1, j + 2});
    v.push_back({i + 2, j + 1});
    v.push_back({i + 2, j + 2});
  } else if (z == '1') {
    v.push_back({i + 1, j + 1});
    v.push_back({i + 2, j + 1});
    v.push_back({i + 2, j + 2});
    v.push_back({i + 1, j + 1});
    v.push_back({i + 1, j + 2});
    v.push_back({i + 2, j + 1});
    v.push_back({i + 1, j + 2});
    v.push_back({i + 2, j + 1});
    v.push_back({i + 2, j + 2});
  } else {
    v.push_back({i + 1, j + 1});
    v.push_back({i + 2, j + 1});
    v.push_back({i + 2, j + 2});
    v.push_back({i + 2, j + 2});
    v.push_back({i + 1, j + 2});
    v.push_back({i + 2, j + 1});
    v.push_back({i + 1, j + 1});
    v.push_back({i + 1, j + 2});
    v.push_back({i + 2, j + 2});
  }
}
void two(char x, char y, char z, char w, long long i, long long j) {
  if (x == '1' && y == '1') {
    v.push_back({i + 2, j + 2});
    v.push_back({i + 1, j + 2});
    v.push_back({i + 2, j + 1});
    v.push_back({i + 1, j + 1});
    v.push_back({i + 2, j + 1});
    v.push_back({i + 2, j + 2});
  } else if (x == '1' && z == '1') {
    v.push_back({i + 2, j + 2});
    v.push_back({i + 1, j + 2});
    v.push_back({i + 2, j + 1});
    v.push_back({i + 1, j + 1});
    v.push_back({i + 1, j + 2});
    v.push_back({i + 2, j + 2});
  } else if (x == '1' && w == '1') {
    v.push_back({i + 2, j + 2});
    v.push_back({i + 1, j + 2});
    v.push_back({i + 2, j + 1});
    v.push_back({i + 1, j + 1});
    v.push_back({i + 2, j + 1});
    v.push_back({i + 1, j + 2});
  } else if (y == '1' && z == '1') {
    v.push_back({i + 2, j + 2});
    v.push_back({i + 1, j + 1});
    v.push_back({i + 2, j + 1});
    v.push_back({i + 1, j + 1});
    v.push_back({i + 1, j + 2});
    v.push_back({i + 2, j + 2});
  } else if (y == '1' && w == '1') {
    v.push_back({i + 2, j + 2});
    v.push_back({i + 1, j + 1});
    v.push_back({i + 2, j + 1});
    v.push_back({i + 1, j + 1});
    v.push_back({i + 2, j + 1});
    v.push_back({i + 1, j + 2});
  } else if (z == '1' && w == '1') {
    v.push_back({i + 2, j + 2});
    v.push_back({i + 1, j + 1});
    v.push_back({i + 1, j + 2});
    v.push_back({i + 1, j + 1});
    v.push_back({i + 2, j + 1});
    v.push_back({i + 1, j + 2});
  }
}
void three(char x, char y, char z, char w, long long i, long long j) {
  if (x == '0') {
    v.push_back({i + 2, j + 2});
    v.push_back({i + 2, j + 1});
    v.push_back({i + 1, j + 2});
  } else if (y == '0') {
    v.push_back({i + 2, j + 2});
    v.push_back({i + 2, j + 1});
    v.push_back({i + 1, j + 1});
  } else if (z == '0') {
    v.push_back({i + 2, j + 2});
    v.push_back({i + 1, j + 1});
    v.push_back({i + 1, j + 2});
  } else if (w == '0') {
    v.push_back({i + 1, j + 1});
    v.push_back({i + 2, j + 1});
    v.push_back({i + 1, j + 2});
  }
}
void four(char x, char y, char z, char w, long long i, long long j) {
  v.push_back({i + 2, j + 2});
  v.push_back({i + 2, j + 1});
  v.push_back({i + 1, j + 2});
  one('1', '0', '0', '0', i, j);
}
void fn(char x, char y, char z, char w, long long i, long long j) {
  long long cal = (x - '0') + (y - '0') + (z - '0') + (w - '0');
  if (cal == 0) return;
  if (cal == 1) one(x, y, z, w, i, j);
  if (cal == 2) two(x, y, z, w, i, j);
  if (cal == 3) three(x, y, z, w, i, j);
  if (cal == 4) four(x, y, z, w, i, j);
}
void fn1(char x, char y, long long i, long long j) {
  if (x == '1' && y == '1') {
    v.push_back({i + 1, j + 1});
    v.push_back({i + 1, j + 2});
    v.push_back({i + 2, j + 2});
  } else if (x == '0' && y == '1') {
    v.push_back({i + 2, j + 1});
    v.push_back({i + 1, j + 2});
    v.push_back({i + 2, j + 2});
  } else if (x == '1' && y == '0') {
    v.push_back({i + 1, j + 1});
    v.push_back({i + 2, j + 1});
    v.push_back({i + 2, j + 2});
  } else
    return;
}
void fn2(char x, char y, long long i, long long j) {
  if (x == '1' && y == '1') {
    v.push_back({i + 1, j + 1});
    v.push_back({i + 2, j + 1});
    v.push_back({i + 2, j + 2});
  } else if (x == '0' && y == '1') {
    v.push_back({i + 2, j + 1});
    v.push_back({i + 1, j + 2});
    v.push_back({i + 2, j + 2});
  } else if (x == '1' && y == '0') {
    v.push_back({i + 1, j + 1});
    v.push_back({i + 1, j + 2});
    v.push_back({i + 2, j + 2});
  } else
    return;
}
char up(char x) {
  if (x == '0')
    return '1';
  else
    return '0';
}
int32_t main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  long long t;
  cin >> t;
  while (t--) {
    v.clear();
    v1.clear();
    long long n, m;
    cin >> n >> m;
    string s[n], s1[n], s2[n];
    long long c = 0;
    for (long long i = 0; i < n; i++) {
      cin >> s[i];
    }
    for (long long i = 0; i < n - 2; i++) {
      for (long long j = 0; j < m; j++) {
        if (s[i][j] == '1') {
          if (j == m - 1) {
            v.push_back({i + 1, j + 1});
            v.push_back({i + 2, j});
            v.push_back({i + 2, j + 1});
            s[i][j] = up(s[i][j]);
            s[i + 1][j - 1] = up(s[i + 1][j - 1]);
            s[i + 1][j] = up(s[i + 1][j]);
            continue;
          }
          if (s[i][j] == '0' && s[i][j + 1] == '0') {
            continue;
          } else if (s[i][j] == '1' && s[i][j + 1] == '1') {
            s[i + 1][j + 1] = up(s[i + 1][j + 1]);
          } else {
            s[i + 1][j] = up(s[i + 1][j]);
            s[i + 1][j + 1] = up(s[i + 1][j + 1]);
          }
          fn1(s[i][j], s[i][j + 1], i, j);
          s[i][j] = '0';
          s[i][j + 1] = '0';
        }
      }
    }
    for (long long j = 0; j < m - 1; j++) {
      if (s[n - 2][j] == '0' && s[n - 1][j] == '0') {
        continue;
      } else if (s[n - 2][j] == '1' && s[n - 1][j] == '1') {
        s[n - 1][j + 1] = (((s[n - 1][j + 1] - '0') ^ 1) + '0');
      } else {
        s[n - 2][j + 1] = (((s[n - 2][j + 1] - '0') ^ 1) + '0');
        s[n - 1][j + 1] = (((s[n - 1][j + 1] - '0') ^ 1) + '0');
      }
      fn2(s[n - 2][j], s[n - 1][j], n - 2, j);
      s[n - 2][j] = '0';
      s[n - 1][j] = '0';
    }
    fn(s[n - 2][m - 2], s[n - 2][m - 1], s[n - 1][m - 2], s[n - 1][m - 1],
       n - 2, m - 2);
    cout << v.size() / 3 << endl;
    for (long long i = 0; i < v.size(); i += 3)
      cout << v[i].first << ' ' << v[i].second << ' ' << v[i + 1].first << ' '
           << v[i + 1].second << ' ' << v[i + 2].first << ' ' << v[i + 2].second
           << endl;
  }
}
