#include <bits/stdc++.h>
const long long mod = 1000 * 1000 * 1000 + 7;
const long long mod1 = 998244353;
const long long INF = 1ll * 1000 * 1000 * 1000 * 1000 * 1000 * 1000 + 7;
using namespace std;
long long power(long long x, long long y) {
  long long res = 1;
  while (y > 0) {
    if (y & 1) res = (long long)(res * x);
    y = y >> 1;
    x = (long long)(x * x);
  }
  return res;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  long long T;
  cin >> T;
  while (T--) {
    long long n, m;
    cin >> n >> m;
    string s[n];
    for (int(i) = (0); (i) < (n); ++(i)) cin >> s[i];
    vector<vector<long long>> ans;
    for (int i = 0; i <= n - 2; i++) {
      for (int j = 0; j <= m - 2; j++) {
        if (s[i][j] == s[i + 1][j] and s[i][j] == '0') continue;
        if (s[i][j] == s[i + 1][j] and s[i][j] == '1') {
          s[i][j] = '0';
          s[i + 1][j] = '0';
          s[i][j + 1] = ((s[i][j + 1] - '0') ^ 1) + '0';
          vector<long long> temp;
          temp.push_back(i + 1);
          temp.push_back(j + 1);
          temp.push_back(i + 2);
          temp.push_back(j + 1);
          temp.push_back(i + 1);
          temp.push_back(j + 2);
          ans.push_back(temp);
          continue;
        }
        if (s[i][j] != s[i + 1][j] and s[i][j] == '1') {
          s[i][j] = '0';
          s[i + 1][j + 1] = ((s[i + 1][j + 1] - '0') ^ 1) + '0';
          s[i][j + 1] = ((s[i][j + 1] - '0') ^ 1) + '0';
          vector<long long> temp;
          temp.push_back(i + 1);
          temp.push_back(j + 1);
          temp.push_back(i + 2);
          temp.push_back(j + 2);
          temp.push_back(i + 1);
          temp.push_back(j + 2);
          ans.push_back(temp);
          continue;
        }
        if (s[i][j] != s[i + 1][j] and s[i + 1][j] == '1') {
          s[i + 1][j] = '0';
          s[i + 1][j + 1] = ((s[i + 1][j + 1] - '0') ^ 1) + '0';
          s[i][j + 1] = ((s[i][j + 1] - '0') ^ 1) + '0';
          vector<long long> temp;
          temp.push_back(i + 2);
          temp.push_back(j + 1);
          temp.push_back(i + 2);
          temp.push_back(j + 2);
          temp.push_back(i + 1);
          temp.push_back(j + 2);
          ans.push_back(temp);
          continue;
        }
      }
    }
    for (int i = 0; i < n - 2; i++) {
      for (int j = m - 2; j <= m - 2; j++) {
        if (s[i][j] == s[i][j + 1] and s[i][j] == '0') continue;
        if (s[i][j] == s[i][j + 1] and s[i][j] == '1') {
          s[i][j] = '0';
          s[i][j + 1] = '0';
          s[i + 1][j + 1] = ((s[i + 1][j + 1] - '0') ^ 1) + '0';
          vector<long long> temp;
          temp.push_back(i + 1);
          temp.push_back(j + 1);
          temp.push_back(i + 1);
          temp.push_back(j + 2);
          temp.push_back(i + 2);
          temp.push_back(j + 2);
          ans.push_back(temp);
          continue;
        }
        if (s[i][j] != s[i][j + 1] and s[i][j] == '1') {
          s[i][j] = '0';
          s[i + 1][j + 1] = ((s[i + 1][j + 1] - '0') ^ 1) + '0';
          s[i + 1][j] = ((s[i + 1][j] - '0') ^ 1) + '0';
          vector<long long> temp;
          temp.push_back(i + 1);
          temp.push_back(j + 1);
          temp.push_back(i + 2);
          temp.push_back(j + 2);
          temp.push_back(i + 2);
          temp.push_back(j + 1);
          ans.push_back(temp);
          continue;
        }
        if (s[i][j] != s[i][j + 1] and s[i][j + 1] == '1') {
          s[i][j + 1] = '0';
          s[i + 1][j + 1] = ((s[i + 1][j + 1] - '0') ^ 1) + '0';
          s[i + 1][j] = ((s[i + 1][j] - '0') ^ 1) + '0';
          vector<long long> temp;
          temp.push_back(i + 1);
          temp.push_back(j + 2);
          temp.push_back(i + 2);
          temp.push_back(j + 2);
          temp.push_back(i + 2);
          temp.push_back(j + 1);
          ans.push_back(temp);
          continue;
        }
      }
    }
    for (int i = n - 2; i <= n - 2; i++) {
      long long c = 0;
      long long d = 0;
      if (s[i][m - 2] == '0')
        c += 1;
      else
        d += 1;
      if (s[i][m - 1] == '0')
        c += 1;
      else
        d += 1;
      if (s[i + 1][m - 2] == '0')
        c += 1;
      else
        d += 1;
      if (s[i + 1][m - 1] == '0')
        c += 1;
      else
        d += 1;
      if (d == 0)
        continue;
      else if (d == 1) {
        long long p[4];
        long long q[4];
        vector<long long> as;
        vector<long long> t;
        long long po = 0;
        for (int l = i; l <= i + 1; l++) {
          long long f = 0;
          for (int k = m - 2; k <= m - 1; k++) {
            if (s[l][k] == '1') {
              s[l][k] = '0';
              p[0] = l;
              q[0] = k;
              f = 1;
              break;
            }
          }
          if (f == 1) break;
        }
        as.push_back(p[0] + 1);
        as.push_back(q[0] + 1);
        for (int l = i; l <= i + 1; l++) {
          long long f = 0;
          for (int k = m - 2; k <= m - 1; k++) {
            if (l == p[0] and k == q[0])
              continue;
            else {
              if (s[l][k] == '0') {
                s[l][k] = '1';
                po += 1;
                t.push_back(l);
                t.push_back(k);
                as.push_back(l + 1);
                as.push_back(k + 1);
                if (po == 2) {
                  f = 1;
                  break;
                }
              }
            }
          }
          if (f == 1) break;
        }
        ans.push_back(as);
        as.clear();
        as.push_back(t[0] + 1);
        as.push_back(t[1] + 1);
        vector<long long> ts;
        po = 0;
        for (int l = i; l <= i + 1; l++) {
          long long f = 0;
          for (int k = m - 2; k <= m - 1; k++) {
            if (s[l][k] == '0') {
              s[l][k] = '1';
              po += 1;
              ts.push_back(l);
              ts.push_back(k);
              as.push_back(l + 1);
              as.push_back(k + 1);
              if (po == 2) {
                f = 1;
                break;
              }
            }
          }
          if (f) break;
        }
        ans.push_back(as);
        s[t[0]][t[1]] = '0';
        as.clear();
        for (int l = i; l <= i + 1; l++) {
          for (int k = m - 2; k <= m - 1; k++) {
            if (s[l][k] == '1') {
              s[l][k] = '0';
              as.push_back(l + 1);
              as.push_back(k + 1);
            }
          }
        }
        ans.push_back(as);
      } else if (d == 2) {
        vector<long long> as;
        long long co = 0;
        long long po = 0;
        for (int l = i; l <= i + 1; l++) {
          for (int k = m - 2; k <= m - 1; k++) {
            if (s[l][k] == '0' and co < 2) {
              s[l][k] = '1';
              co += 1;
              as.push_back(l + 1);
              as.push_back(k + 1);
            } else {
              if (po < 1 and s[l][k] == '1') {
                s[l][k] = '0';
                po += 1;
                as.push_back(l + 1);
                as.push_back(k + 1);
              }
            }
          }
        }
        ans.push_back(as);
        as.clear();
        for (int l = i; l <= i + 1; l++) {
          for (int k = m - 2; k <= m - 1; k++) {
            if (s[l][k] == '1') {
              s[l][k] = '0';
              as.push_back(l + 1);
              as.push_back(k + 1);
            }
          }
        }
        ans.push_back(as);
      } else if (d == 3) {
        vector<long long> as;
        for (int l = i; l <= i + 1; l++) {
          for (int k = m - 2; k <= m - 1; k++) {
            if (s[l][k] == '1') {
              s[l][k] = '0';
              as.push_back(l + 1);
              as.push_back(k + 1);
            }
          }
        }
        ans.push_back(as);
      } else {
        long long p[4];
        long long q[4];
        vector<long long> as;
        vector<long long> t;
        long long co = 0;
        for (int l = i; l <= i + 1; l++) {
          for (int k = m - 2; k <= m - 1; k++) {
            if (s[l][k] == '1' and co < 3) {
              s[l][k] = '0';
              as.push_back(l + 1);
              as.push_back(k + 1);
              co += 1;
            }
          }
        }
        ans.push_back(as);
        as.clear();
        long long po = 0;
        for (int l = i; l <= i + 1; l++) {
          long long f = 0;
          for (int k = m - 2; k <= m - 1; k++) {
            if (s[l][k] == '1') {
              s[l][k] = '0';
              p[0] = l;
              q[0] = k;
              f = 1;
              break;
            }
          }
          if (f == 1) break;
        }
        as.push_back(p[0] + 1);
        as.push_back(q[0] + 1);
        for (int l = i; l <= i + 1; l++) {
          long long f = 0;
          for (int k = m - 2; k <= m - 1; k++) {
            if (l == p[0] and k == q[0])
              continue;
            else {
              if (s[l][k] == '0') {
                s[l][k] = '1';
                po += 1;
                t.push_back(l);
                t.push_back(k);
                as.push_back(l + 1);
                as.push_back(k + 1);
                if (po == 2) {
                  f = 1;
                  break;
                }
              }
            }
          }
          if (f == 1) break;
        }
        ans.push_back(as);
        as.clear();
        as.push_back(t[0] + 1);
        as.push_back(t[1] + 1);
        vector<long long> ts;
        po = 0;
        for (int l = i; l <= i + 1; l++) {
          long long f = 0;
          for (int k = m - 2; k <= m - 1; k++) {
            if (s[l][k] == '0') {
              s[l][k] = '1';
              po += 1;
              ts.push_back(l);
              ts.push_back(k);
              as.push_back(l + 1);
              as.push_back(k + 1);
              if (po == 2) {
                f = 1;
                break;
              }
            }
          }
          if (f) break;
        }
        ans.push_back(as);
        s[t[0]][t[1]] = '0';
        as.clear();
        for (int l = i; l <= i + 1; l++) {
          for (int k = m - 2; k <= m - 1; k++) {
            if (s[l][k] == '1') {
              s[l][k] = '0';
              as.push_back(l + 1);
              as.push_back(k + 1);
            }
          }
        }
        ans.push_back(as);
      }
    }
    cout << int((ans).size()) << "\n";
    for (int i = 0; i < int((ans).size()); i++) {
      for (int j = 0; j < 6; j++) {
        cout << ans[i][j] << ' ';
      }
      cout << "\n";
    }
  }
  return 0;
}
