#include <bits/stdc++.h>
using namespace std;
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
long long random_number() { return rng(); }
long long random_number(long long low, long long high) {
  return uniform_int_distribution<long long>(low, high)(rng);
}
bool is_down(char x) { return ('a' <= x && x <= 'z'); }
bool is_upper(char x) { return ('A' <= x && x <= 'Z'); }
bool is_digit(char x) { return ('0' <= x && x <= '9'); }
long long bigmod(long long a, long long p, long long m) {
  long long res = 1, x = a % m;
  while (p) {
    if (p & 1) res = (res * x) % m;
    x = (x * x) % m;
    p >>= 1;
  }
  return res;
}
long long inv(long long a, long long p) { return bigmod(a, p - 2, p); }
long long inv_euclid(long long a, long long m) {
  long long m0 = m;
  long long y = 0, x = 1;
  if (m == 1) return 0;
  while (a > 1) {
    long long q = a / m;
    long long t = m;
    m = a % m, a = t;
    t = y;
    y = x - q * y;
    x = t;
  }
  if (x < 0) x += m0;
  return x;
}
int n, m;
string s[105];
vector<vector<int> > ans;
void flip(int i, int j) {
  if (s[i][j] == '0') {
    s[i][j] = '1';
  } else {
    s[i][j] = '0';
  }
}
void apply(vector<pair<int, int> > &v) {
  vector<int> e;
  for (auto x : v) {
    flip(x.first, x.second);
    e.push_back(x.first);
    e.push_back(x.second);
  }
  if (v.size() > 0) {
    ans.push_back(e);
  }
}
void pushdown(int i, int j) {
  assert(i >= 0);
  assert(j >= 0);
  assert(i < n - 1);
  assert(j < m - 1);
  vector<pair<int, int> > v;
  if (s[i][j] == '1') {
    v.push_back({i, j});
  }
  if (s[i][j + 1] == '1') {
    v.push_back({i, j + 1});
  }
  if (v.size() == 1) {
    v.push_back({i + 1, j});
    v.push_back({i + 1, j + 1});
  } else if (v.size() == 2) {
    v.push_back({i + 1, j + 1});
  }
  apply(v);
}
void pushright(int i, int j) {
  assert(i >= 0);
  assert(j >= 0);
  assert(i < n - 1);
  assert(j < m - 1);
  vector<pair<int, int> > v;
  if (s[i][j] == '1') {
    v.push_back({i, j});
  }
  if (s[i + 1][j] == '1') {
    v.push_back({i + 1, j});
  }
  if (v.size() == 1) {
    v.push_back({i, j + 1});
    v.push_back({i + 1, j + 1});
  } else if (v.size() == 2) {
    v.push_back({i + 1, j + 1});
  }
  apply(v);
}
void finalize(int i = n - 2, int j = m - 2) {
  assert(i >= 0);
  assert(j >= 0);
  assert(i < n - 1);
  assert(j < m - 1);
  int count = 0;
  for (int di = 0; di < (2); di++) {
    for (int dj = 0; dj < (2); dj++) {
      count += s[i + di][j + dj] - '0';
    }
  }
  vector<pair<int, int> > v;
  if (count == 0) {
    return;
  } else if (count == 3) {
    for (int di = 0; di < (2); di++) {
      for (int dj = 0; dj < (2); dj++) {
        if (s[i + di][j + dj] == '1') {
          v.push_back({i + di, j + dj});
        }
      }
    }
  } else if (count == 2) {
    bool done = false;
    for (int di = 0; di < (2); di++) {
      for (int dj = 0; dj < (2); dj++) {
        if (s[i + di][j + dj] == '0') {
          v.push_back({i + di, j + dj});
        } else if (!done) {
          done = true;
          v.push_back({i + di, j + dj});
        }
      }
    }
  } else if (count == 1) {
    int done = 0;
    for (int di = 0; di < (2); di++) {
      for (int dj = 0; dj < (2); dj++) {
        if (s[i + di][j + dj] == '1') {
          v.push_back({i + di, j + dj});
        } else if (done < 2) {
          done++;
          v.push_back({i + di, j + dj});
        }
      }
    }
  } else if (count == 4) {
    int done = 0;
    for (int di = 0; di < (2); di++) {
      for (int dj = 0; dj < (2); dj++) {
        if (done < 3) {
          done++;
          v.push_back({i + di, j + dj});
        }
      }
    }
  }
  apply(v);
  finalize();
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int t;
  cin >> t;
  while (t--) {
    cin >> n >> m;
    ans.clear();
    for (int i = 0; i < (n); i++) cin >> s[i];
    for (int i = 0; i < (n - 2); i++) {
      for (int j = 0; j < m - 1; j += 2) {
        pushdown(i, j);
      }
      if (m % 2 == 1) {
        pushdown(i, m - 2);
      }
    }
    for (int j = 0; j < m - 2; j++) {
      pushright(n - 2, j);
    }
    finalize();
    cout << ans.size() << "\n";
    for (auto v : ans) {
      for (auto e : v) {
        cout << e + 1 << " ";
      }
      cout << "\n";
    }
  }
}
