#include <bits/stdc++.h>
using namespace std;
using ll = long long;
template <typename T, typename U>
ostream& operator<<(ostream& os, const pair<T, U>& p) {
  os << p.first << " " << p.second;
  return os;
}
template <typename T>
ostream& operator<<(ostream& os, const vector<T>& vec) {
  for (int i = 0; i < vec.size(); i++) {
    os << vec[i] << (i + 1 == vec.size() ? "" : " ");
  }
  return os;
}
void solve() {
  int h, w;
  cin >> h >> w;
  vector<vector<int>> ans;
  vector<vector<int>> s(h, vector<int>(w));
  for (int i = 0; (i) < (int)(h); (i)++) {
    string t;
    cin >> t;
    for (int j = 0; (j) < (int)(w); (j)++) {
      s[i][j] = t[j] - '0';
    }
  }
  auto exc = [&](int y0, int x0, int y1, int x1, int y2, int x2) {
    s[y0][x0] = s[y0][x0] ^ 1;
    s[y1][x1] = s[y1][x1] ^ 1;
    s[y2][x2] = s[y2][x2] ^ 1;
    vector<int> r = {y0 + 1, x0 + 1, y1 + 1, x1 + 1, y2 + 1, x2 + 1};
    ans.push_back(r);
  };
  auto exc2 = [&](int topy, int leftx, int no_use_y, int no_use_x) {
    vector<int> r;
    for (int i = topy; i < topy + 2; i++) {
      for (int j = leftx; j < leftx + 2; j++) {
        if (i != no_use_y || j != no_use_x) {
          r.push_back(i + 1);
          r.push_back(j + 1);
        }
      }
    }
    s[r[0] - 1][r[1] - 1] ^= 1;
    s[r[2] - 1][r[3] - 1] ^= 1;
    s[r[4] - 1][r[5] - 1] ^= 1;
    ans.push_back(r);
  };
  if ((h & 1) && (w & 1)) {
    if (s[h - 1][w - 1] == 1) {
      exc(h - 1, w - 1, h - 2, w - 1, h - 1, w - 2);
    }
    for (int i = 0; i < h - 1; i += 2) {
      if (s[i][w - 1] == 1) {
        if (s[i + 1][w - 1] == 1) {
          exc(i, w - 1, i + 1, w - 1, i, w - 2);
        } else {
          exc(i, w - 1, i, w - 2, i + 1, w - 2);
        }
      } else {
        if (s[i + 1][w - 1] == 1) {
          exc(i + 1, w - 1, i, w - 2, i + 1, w - 2);
        }
      }
    }
    for (int i = 0; i < w - 1; i += 2) {
      if (s[h - 1][i] == 1) {
        if (s[h - 1][i + 1] == 1) {
          exc(h - 1, i, h - 1, i + 1, h - 2, i);
        } else {
          exc(h - 1, i, h - 2, i, h - 2, i + 1);
        }
      } else {
        if (s[h - 1][i + 1] == 1) {
          exc(h - 1, i + 1, h - 2, i, h - 2, i + 1);
        }
      }
    }
  } else if (h & 1) {
    for (int i = 0; i < w - 1; i += 2) {
      if (s[h - 1][i] == 1) {
        if (s[h - 1][i + 1] == 1) {
          exc(h - 1, i, h - 1, i + 1, h - 2, i);
        } else {
          exc(h - 1, i, h - 2, i, h - 2, i + 1);
        }
      } else {
        if (s[h - 1][i + 1] == 1) {
          exc(h - 1, i + 1, h - 2, i, h - 2, i + 1);
        }
      }
    }
  } else if (w & 1) {
    for (int i = 0; i < h - 1; i += 2) {
      if (s[i][w - 1] == 1) {
        if (s[i + 1][w - 1] == 1) {
          exc(i, w - 1, i + 1, w - 1, i, w - 2);
        } else {
          exc(i, w - 1, i, w - 2, i + 1, w - 2);
        }
      } else {
        if (s[i + 1][w - 1] == 1) {
          exc(i + 1, w - 1, i, w - 2, i + 1, w - 2);
        }
      }
    }
  }
  if (h & 1) h--;
  if (w & 1) w--;
  for (int i = 0; i < h; i += 2) {
    for (int j = 0; j < w; j += 2) {
      while (true) {
        int c = 0;
        for (int ii = i; ii < i + 2; ii++) {
          for (int jj = j; jj < j + 2; jj++) {
            c += (s[ii][jj] == 1);
          }
        }
        if (c == 0) {
          break;
        } else if (c == 1 || c == 3) {
          [&]() {
            for (int ii = i; ii < i + 2; ii++) {
              for (int jj = j; jj < j + 2; jj++) {
                if (s[ii][jj] == 0) {
                  exc2(i, j, ii, jj);
                  return;
                }
              }
            }
          }();
        } else if (c == 2 || c == 4) {
          [&]() {
            for (int ii = i; ii < i + 2; ii++) {
              for (int jj = j; jj < j + 2; jj++) {
                if (s[ii][jj] == 1) {
                  exc2(i, j, ii, jj);
                  return;
                }
              }
            }
          }();
        }
      }
    }
  }
  cout << ans.size() << '\n';
  for (int i = 0; (i) < (int)(ans.size()); (i)++) {
    cout << ans[i] << '\n';
  }
}
int main() {
  cin.tie(nullptr);
  ios::sync_with_stdio(false);
  int t;
  cin >> t;
  while (t--) {
    solve();
  }
  return 0;
}
