#include <bits/stdc++.h>
using namespace std;
vector<vector<long long> > ans;
long long counter = -1;
void three(long long p, long long q) {
  counter++;
  ans[counter].insert(ans[counter].end(), {p, q, p, q + 1, p + 1, q + 1});
  counter++;
  ans[counter].insert(ans[counter].end(), {p, q, p + 1, q, p + 1, q + 1});
  counter++;
  ans[counter].insert(ans[counter].end(), {p, q, p, q + 1, p + 1, q});
}
void three2(long long p, long long q) {
  counter++;
  ans[counter].insert(ans[counter].end(), {p, q, p, q - 1, p + 1, q - 1});
  counter++;
  ans[counter].insert(ans[counter].end(), {p, q, p + 1, q, p + 1, q - 1});
  counter++;
  ans[counter].insert(ans[counter].end(), {p, q, p, q - 1, p + 1, q});
}
void three3(long long p, long long q) {
  counter++;
  ans[counter].insert(ans[counter].end(), {p, q, p - 1, q, p - 1, q + 1});
  counter++;
  ans[counter].insert(ans[counter].end(), {p, q, p, q + 1, p - 1, q + 1});
  counter++;
  ans[counter].insert(ans[counter].end(), {p, q, p - 1, q, p, q + 1});
}
void three4(long long p, long long q) {
  counter++;
  ans[counter].insert(ans[counter].end(), {p, q, p, q - 1, p - 1, q - 1});
  counter++;
  ans[counter].insert(ans[counter].end(), {p, q, p - 1, q, p - 1, q - 1});
  counter++;
  ans[counter].insert(ans[counter].end(), {p, q, p, q - 1, p - 1, q});
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  int t;
  cin >> t;
  while (t--) {
    long long n, m;
    cin >> n >> m;
    string a[n];
    for (int i = 0; i < n; i++) {
      cin >> a[i];
    }
    vector<long long> temp;
    counter = -1;
    for (int i = 0; i < n - 2; i++) {
      for (int j = 0; j < m; j++) {
        if (a[i][j] == '0') continue;
        long long p = i + 1, q = j + 1;
        if (j != m - 1) {
          if (a[i][j + 1] == '1') {
            a[i][j] = a[i][j + 1] = '0';
            counter++;
            ans.push_back(temp);
            ans[counter].insert(ans[counter].end(), {p, q, p, q + 1, p + 1, q});
            if (a[i + 1][j] == '0')
              a[i + 1][j] = '1';
            else
              a[i + 1][j] = '0';
          } else {
            a[i][j] = '0';
            counter++;
            ans.push_back(temp);
            ans[counter].insert(ans[counter].end(),
                                {p, q, p + 1, q, p + 1, q + 1});
            if (a[i + 1][j] == '0')
              a[i + 1][j] = '1';
            else
              a[i + 1][j] = '0';
            if (a[i + 1][j + 1] == '0')
              a[i + 1][j + 1] = '1';
            else
              a[i + 1][j + 1] = '0';
          }
        } else {
          a[i][j] = '0';
          counter++;
          ans.push_back(temp);
          ans[counter].insert(ans[counter].end(),
                              {p, q, p + 1, q, p + 1, q - 1});
          if (a[i + 1][j] == '0')
            a[i + 1][j] = '1';
          else
            a[i + 1][j] = '0';
          if (a[i + 1][j - 1] == '0')
            a[i + 1][j - 1] = '1';
          else
            a[i + 1][j - 1] = '0';
        }
      }
    }
    int i = n - 2;
    for (int j = 0; j < m - 2; j++) {
      long long p = i + 1, q = j + 1;
      if (a[i][j] == '0' && a[i + 1][j] == '0')
        continue;
      else if (a[i][j] == '0' && a[i + 1][j] == '1') {
        counter++;
        ans.push_back(temp);
        ans[counter].insert(ans[counter].end(),
                            {p + 1, q, p, q + 1, p + 1, q + 1});
        if (a[i + 1][j + 1] == '0')
          a[i + 1][j + 1] = '1';
        else
          a[i + 1][j + 1] = '0';
        if (a[i][j + 1] == '0')
          a[i][j + 1] = '1';
        else
          a[i][j + 1] = '0';
      } else if (a[i][j] == '1' && a[i + 1][j] == '0') {
        counter++;
        ans.push_back(temp);
        ans[counter].insert(ans[counter].end(), {p, q, p, q + 1, p + 1, q + 1});
        if (a[i + 1][j + 1] == '0')
          a[i + 1][j + 1] = '1';
        else
          a[i + 1][j + 1] = '0';
        if (a[i][j + 1] == '0')
          a[i][j + 1] = '1';
        else
          a[i][j + 1] = '0';
      } else {
        counter++;
        ans.push_back(temp);
        ans[counter].insert(ans[counter].end(), {p + 1, q, p, q, p + 1, q + 1});
        if (a[i + 1][j + 1] == '0')
          a[i + 1][j + 1] = '1';
        else
          a[i + 1][j + 1] = '0';
      }
    }
    i = n - 2;
    int j = m - 2;
    long long p = i + 1, q = j + 1;
    long long cnt[4] = {0};
    if (a[i][j] == '1') cnt[0]++;
    if (a[i][j + 1] == '1') cnt[1]++;
    if (a[i + 1][j] == '1') cnt[2]++;
    if (a[i + 1][j + 1] == '1') cnt[3]++;
    long long sum = cnt[0] + cnt[1] + cnt[2] + cnt[3];
    if (sum == 3) {
      counter++;
      ans.push_back(temp);
      if (!cnt[0])
        ans[counter].insert(ans[counter].end(),
                            {p + 1, q, p, q + 1, p + 1, q + 1});
      if (!cnt[1])
        ans[counter].insert(ans[counter].end(), {p, q, p + 1, q, p + 1, q + 1});
      if (!cnt[2])
        ans[counter].insert(ans[counter].end(), {p, q, p, q + 1, p + 1, q + 1});
      if (!cnt[3])
        ans[counter].insert(ans[counter].end(), {p, q, p + 1, q, p, q + 1});
    }
    if (sum == 1) {
      ans.push_back(temp);
      ans.push_back(temp);
      ans.push_back(temp);
      if (cnt[0]) three(p, q);
      if (cnt[1]) three2(p, q + 1);
      if (cnt[2]) three3(p + 1, q);
      if (cnt[3]) three4(p + 1, q + 1);
    }
    if (sum == 4) {
      counter++;
      ans.push_back(temp);
      ans[counter].insert(ans[counter].end(),
                          {p + 1, q, p, q + 1, p + 1, q + 1});
      ans.push_back(temp);
      ans.push_back(temp);
      ans.push_back(temp);
      three(p, q);
    }
    if (sum == 2) {
      if (cnt[0]) {
        counter++;
        ans.push_back(temp);
        if (cnt[1]) {
          ans[counter].insert(ans[counter].end(),
                              {p, q, p + 1, q, p + 1, q + 1});
        } else if (cnt[2]) {
          ans[counter].insert(ans[counter].end(),
                              {p, q, p, q + 1, p + 1, q + 1});
        } else {
          ans[counter].insert(ans[counter].end(), {p, q, p + 1, q, p, q + 1});
        }
        counter++;
        ans.push_back(temp);
        ans[counter].insert(ans[counter].end(),
                            {p + 1, q, p, q + 1, p + 1, q + 1});
      } else if (cnt[1]) {
        counter++;
        ans.push_back(temp);
        if (cnt[0]) {
          ans[counter].insert(ans[counter].end(),
                              {p, q + 1, p + 1, q, p + 1, q + 1});
        } else if (cnt[3]) {
          ans[counter].insert(ans[counter].end(), {p, q, p, q + 1, p + 1, q});
        } else {
          ans[counter].insert(ans[counter].end(),
                              {p, q, p, q + 1, p + 1, q + 1});
        }
        counter++;
        ans.push_back(temp);
        ans[counter].insert(ans[counter].end(), {p, q, p + 1, q, p + 1, q + 1});
      } else if (cnt[2]) {
        counter++;
        ans.push_back(temp);
        if (cnt[0]) {
          ans[counter].insert(ans[counter].end(),
                              {p + 1, q, p + 1, q + 1, p, q + 1});
        } else if (cnt[3]) {
          ans[counter].insert(ans[counter].end(), {p + 1, q, p, q, p, q + 1});
        } else {
          ans[counter].insert(ans[counter].end(),
                              {p, q, p + 1, q, p + 1, q + 1});
        }
        counter++;
        ans.push_back(temp);
        ans[counter].insert(ans[counter].end(), {p, q, p, q + 1, p + 1, q + 1});
      } else if (cnt[3]) {
        counter++;
        ans.push_back(temp);
        if (cnt[1]) {
          ans[counter].insert(ans[counter].end(),
                              {p, q, p + 1, q, p + 1, q + 1});
        } else if (cnt[2]) {
          ans[counter].insert(ans[counter].end(),
                              {p, q, p, q + 1, p + 1, q + 1});
        } else {
          ans[counter].insert(ans[counter].end(),
                              {p + 1, q + 1, p + 1, q, p, q + 1});
        }
        counter++;
        ans.push_back(temp);
        ans[counter].insert(ans[counter].end(), {p, q, p, q + 1, p + 1, q});
      }
    }
    cout << counter + 1 << '\n';
    for (int i = 0; i < counter + 1; i++) {
      for (int j = 0; j < 6; j++) cout << ans[i][j] << " ";
      cout << '\n';
    }
    ans.clear();
  }
  return 0;
}
