#include <bits/stdc++.h>
using namespace std;
int n, k, a[105][105], m;
vector<pair<int, int> > ans;
void Solve2() {
  int cur = 0, cnt = 0;
  for (int i = n - 1; i <= n; ++i) {
    for (int j = m - 1; j <= m; ++j) {
      if (a[i][j] == 1 && cnt == 0) {
        ans.push_back({i, j});
        ++cnt;
        a[i][j] ^= 1;
      } else if (a[i][j] == 0 && cur < 2) {
        ans.push_back({i, j});
        cur++;
        a[i][j] ^= 1;
      }
    }
  }
  for (int i = n - 1; i <= n; ++i) {
    for (int j = m - 1; j <= m; ++j) {
      if (a[i][j] == 1) ans.push_back({i, j});
    }
  }
}
void Solve1() {
  int cur = 0;
  for (int i = n - 1; i <= n; ++i) {
    for (int j = m - 1; j <= m; ++j) {
      if (a[i][j] == 1) {
        ans.push_back({i, j});
        a[i][j] ^= 1;
      } else if (cur < 2) {
        ans.push_back({i, j}), cur++;
        a[i][j] ^= 1;
      }
    }
  }
  Solve2();
}
void Solve4() {
  int cur = 0;
  for (int i = n - 1; i <= n; ++i) {
    for (int j = m - 1; j <= m; ++j) {
      if (a[i][j] == 1) {
        ans.push_back({i, j});
        a[i][j] ^= 1;
      }
    }
  }
  Solve1();
}
void Handle() {
  for (int i = 1; i < n - 1; ++i) {
    for (int j = 1; j < m; ++j) {
      if (a[i][j] == 1) {
        a[i][j] ^= 1;
        ans.push_back({i, j});
        a[i + 1][j] ^= 1;
        ans.push_back({i + 1, j});
        a[i + 1][j + 1] ^= 1;
        ans.push_back({i + 1, j + 1});
      }
    }
    if (a[i][m] == 1) {
      a[i][m] ^= 1;
      ans.push_back({i, m});
      a[i + 1][m] ^= 1;
      ans.push_back({i + 1, m});
      a[i + 1][m - 1] ^= 1;
      ans.push_back({i + 1, m - 1});
    }
  }
  for (int j = 1; j < m - 1; ++j) {
    if (a[n - 1][j] == 1) {
      a[n - 1][j] ^= 1;
      ans.push_back({n - 1, j});
      a[n - 1][j + 1] ^= 1;
      ans.push_back({n - 1, j + 1});
      a[n][j + 1] ^= 1;
      ans.push_back({n, j + 1});
    }
    if (a[n][j] == 1) {
      a[n][j] ^= 1;
      ans.push_back({n, j});
      a[n - 1][j + 1] ^= 1;
      ans.push_back({n - 1, j + 1});
      a[n][j + 1] ^= 1;
      ans.push_back({n, j + 1});
    }
  }
  int cnt = 0;
  for (int i = n - 1; i <= n; ++i) {
    for (int j = m - 1; j <= m; ++j) {
      if (a[i][j] == 1) ++cnt;
    }
  }
  if (cnt == 3) {
    for (int i = n - 1; i <= n; ++i) {
      for (int j = m - 1; j <= m; ++j) {
        if (a[i][j] == 1) ans.push_back({i, j});
      }
    }
    return;
  }
  if (cnt == 0) return;
  if (cnt == 1) {
    Solve1();
    return;
  }
  if (cnt == 2) {
    Solve2();
    return;
  }
  if (cnt == 4) {
    Solve4();
    return;
  }
}
void Solve() {
  cin >> n >> m;
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= m; ++j) {
      char x;
      cin >> x;
      a[i][j] = x - '0';
    }
  }
  ans.clear();
  Handle();
  cout << ans.size() / 3 << '\n';
  for (int i = 0; i < ans.size(); i += 3) {
    for (int j = 0; j <= 2; ++j)
      cout << ans[i + j].first << " " << ans[i + j].second << " ";
    cout << '\n';
  }
}
int main() {
  ios_base::sync_with_stdio(NULL);
  cin.tie(NULL);
  cout.tie(NULL);
  if (fopen(""
            ".inp",
            "r")) {
    freopen(
        ""
        ".inp",
        "r", stdin);
    freopen(
        ""
        ".out",
        "w", stdout);
  }
  int t;
  cin >> t;
  while (t--) {
    Solve();
  }
  return 0;
}
