#include <bits/stdc++.h>
using namespace std;
char arr[1000][1000];
char fl(char a) {
  if (a == '1')
    return '0';
  else
    return '1';
}
int main() {
  int t;
  cin >> t;
  for (int o = 0; o < t; o++) {
    int n, m;
    cin >> n >> m;
    for (int i = 1; i <= n; i++)
      for (int j = 1; j <= m; j++) cin >> arr[i][j];
    vector<pair<int, int> > vp1, vp2, vp3;
    if (n % 2 == 1) {
      for (int j = 1; j <= m; j++) {
        if (arr[n][j] == '1') {
          if (j < m - 1 || j == 1) {
            vp1.push_back({n, j});
            vp2.push_back({n - 1, j});
            vp3.push_back({n - 1, j + 1});
            arr[n][j] = fl(arr[n][j]);
            arr[n - 1][j] = fl(arr[n - 1][j]);
            arr[n - 1][j + 1] = fl(arr[n - 1][j + 1]);
          } else {
            vp1.push_back({n, j});
            vp2.push_back({n - 1, j});
            vp3.push_back({n - 1, j - 1});
            arr[n][j] = fl(arr[n][j]);
            arr[n - 1][j] = fl(arr[n - 1][j]);
            arr[n - 1][j - 1] = fl(arr[n - 1][j - 1]);
          }
        }
      }
    }
    if (m % 2 == 1) {
      for (int i = 1; i <= n; i++) {
        if (arr[i][m] == '1') {
          if (i < n - 1 || i == 1) {
            vp1.push_back({i, m});
            vp2.push_back({i, m - 1});
            vp3.push_back({i + 1, m - 1});
            arr[i][m] = fl(arr[i][m]);
            arr[i][m - 1] = fl(arr[i][m - 1]);
            arr[i + 1][m - 1] = fl(arr[i + 1][m - 1]);
          } else {
            vp1.push_back({i, m});
            vp2.push_back({i, m - 1});
            vp3.push_back({i - 1, m - 1});
            arr[i][m] = fl(arr[i][m]);
            arr[i][m - 1] = fl(arr[i][m - 1]);
            arr[i - 1][m - 1] = fl(arr[i - 1][m - 1]);
          }
        }
      }
    }
    for (int i = 1; i < n; i += 2) {
      for (int j = 1; j < m; j += 2) {
        if (arr[i][j] == '1' && arr[i][j + 1] == '0' && arr[i + 1][j] == '0' &&
            arr[i + 1][j + 1] == '0') {
          vp1.push_back({i, j}), vp2.push_back({i, j + 1}),
              vp3.push_back({i + 1, j + 1});
          vp1.push_back({i, j}), vp2.push_back({i, j + 1}),
              vp3.push_back({i + 1, j});
          vp1.push_back({i, j}), vp2.push_back({i + 1, j}),
              vp3.push_back({i + 1, j + 1});
        } else if (arr[i][j] == '0' && arr[i][j + 1] == '1' &&
                   arr[i + 1][j] == '0' && arr[i + 1][j + 1] == '0') {
          vp1.push_back({i, j}), vp2.push_back({i, j + 1}),
              vp3.push_back({i + 1, j});
          vp1.push_back({i, j}), vp2.push_back({i, j + 1}),
              vp3.push_back({i + 1, j + 1});
          vp1.push_back({i + 1, j}), vp2.push_back({i, j + 1}),
              vp3.push_back({i + 1, j + 1});
        } else if (arr[i][j] == '0' && arr[i + 1][j] == '0' &&
                   arr[i][j + 1] == '0' && arr[i + 1][j + 1] == '1') {
          vp1.push_back({i, j}), vp2.push_back({i, j + 1}),
              vp3.push_back({i + 1, j + 1});
          vp1.push_back({i, j}), vp2.push_back({i + 1, j}),
              vp3.push_back({i + 1, j + 1});
          vp1.push_back({i + 1, j}), vp2.push_back({i + 1, j + 1}),
              vp3.push_back({i, j + 1});
        } else if (arr[i][j] == '0' && arr[i + 1][j] == '1' &&
                   arr[i][j + 1] == '0' && arr[i + 1][j + 1] == '0') {
          vp1.push_back({i, j}), vp2.push_back({i, j + 1}),
              vp3.push_back({i + 1, j});
          vp1.push_back({i, j}), vp2.push_back({i + 1, j}),
              vp3.push_back({i + 1, j + 1});
          vp1.push_back({i + 1, j}), vp2.push_back({i + 1, j + 1}),
              vp3.push_back({i, j + 1});
        } else if (arr[i][j] == '1' && arr[i + 1][j] == '1' &&
                   arr[i][j + 1] == '0' && arr[i + 1][j + 1] == '0') {
          vp1.push_back({i, j + 1}), vp2.push_back({i, j}),
              vp3.push_back({i + 1, j + 1});
          vp1.push_back({i, j + 1}), vp2.push_back({i + 1, j}),
              vp3.push_back({i + 1, j + 1});
        } else if (arr[i][j] == '1' && arr[i][j + 1] == '0' &&
                   arr[i + 1][j] == '0' && arr[i + 1][j + 1] == '1') {
          vp1.push_back({i, j}), vp2.push_back({i, j + 1}),
              vp3.push_back({i + 1, j});
          vp1.push_back({i + 1, j + 1}), vp2.push_back({i + 1, j}),
              vp3.push_back({i, j + 1});
        } else if (arr[i][j] == '0' && arr[i][j + 1] == '1' &&
                   arr[i + 1][j] == '1' && arr[i + 1][j + 1] == '0') {
          vp1.push_back({i, j}), vp2.push_back({i, j + 1}),
              vp3.push_back({i + 1, j + 1});
          vp1.push_back({i, j}), vp2.push_back({i + 1, j}),
              vp3.push_back({i + 1, j + 1});
        } else if (arr[i][j] == '0' && arr[i][j + 1] == '1' &&
                   arr[i + 1][j] == '0' && arr[i + 1][j + 1] == '1') {
          vp1.push_back({i, j}), vp2.push_back({i, j + 1}),
              vp3.push_back({i + 1, j});
          vp1.push_back({i, j}), vp2.push_back({i + 1, j}),
              vp3.push_back({i + 1, j + 1});
        } else if (arr[i][j] == '1' && arr[i][j + 1] == '1' &&
                   arr[i + 1][j] == '1' && arr[i + 1][j + 1] == '1') {
          vp1.push_back({i + 1, j}), vp2.push_back({i + 1, j + 1}),
              vp3.push_back({i, j + 1});
          vp1.push_back({i, j}), vp2.push_back({i, j + 1}),
              vp3.push_back({i + 1, j + 1});
          vp1.push_back({i, j}), vp2.push_back({i, j + 1}),
              vp3.push_back({i + 1, j});
          vp1.push_back({i, j}), vp2.push_back({i + 1, j}),
              vp3.push_back({i + 1, j + 1});
        } else if (arr[i][j] == '0' && arr[i][j + 1] == '0' &&
                   arr[i + 1][j] == '1' && arr[i + 1][j + 1] == '1') {
          vp1.push_back({i, j}), vp2.push_back({i + 1, j + 1}),
              vp3.push_back({i, j + 1});
          vp1.push_back({i, j}), vp2.push_back({i, j + 1}),
              vp3.push_back({i + 1, j});
        } else if (arr[i][j] == '1' && arr[i][j + 1] == '1' &&
                   arr[i + 1][j] == '0' && arr[i + 1][j + 1] == '0') {
          vp1.push_back({i, j}), vp2.push_back({i + 1, j}),
              vp3.push_back({i + 1, j + 1});
          vp1.push_back({i + 1, j}), vp2.push_back({i + 1, j + 1}),
              vp3.push_back({i, j + 1});
        } else if (arr[i][j] == '1' || arr[i][j + 1] == '1') {
          vector<pair<int, int> > vp;
          for (int k = 0; k < 2; k++) {
            for (int l = 0; l < 2; l++) {
              if (arr[i + k][l + j] == '1') vp.push_back({i + k, l + j});
            }
          }
          vp1.push_back(vp[0]);
          vp2.push_back(vp[1]);
          vp3.push_back(vp[2]);
        }
        arr[i][j] = '0';
        arr[i + 1][j] = '0';
        arr[i][j + 1] = '0';
        arr[i + 1][j + 1] = '0';
      }
    }
    cout << vp1.size() << '\n';
    for (int i = 0; i < vp1.size(); i++)
      cout << vp1[i].first << " " << vp1[i].second << " " << vp2[i].first << " "
           << vp2[i].second << " " << vp3[i].first << " " << vp3[i].second
           << '\n';
  }
  return 0;
}
