#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1e9 + 7;
const long long INF = LLONG_MAX;
const long long MINF = LLONG_MIN;
template <typename T>
inline T abs(T x) {
  return x < 0 ? -x : x;
}
inline long long pow_mod(long long x, long long n) {
  long long r = 1;
  while (n) {
    if (n % 2) r = (r * x) % MOD;
    x = (x * x) % MOD;
    n /= 2;
  }
  return r;
}
inline long long pow_(long long x, long long n) {
  long long r = 1;
  while (n) {
    if (n % 2) r = (r * x);
    x = (x * x);
    n /= 2;
  }
  return r;
}
int n, m;
int N, M;
string s[100];
vector<pair<int, int> > ans;
inline void go(pair<int, int> t, int i0, int j0) {
  int i = t.first, j = t.second;
  if (!(i - i0) && !(j - j0)) {
    ans.push_back({i + 1, j}), ans.push_back({i, j}), ans.push_back({i, j + 1});
    ans.push_back({i, j}), ans.push_back({i + 1, j}),
        ans.push_back({i + 1, j + 1});
    ans.push_back({i, j}), ans.push_back({i, j + 1}),
        ans.push_back({i + 1, j + 1});
  } else if (!(i - i0) && (j - j0)) {
    ans.push_back({i + 1, j}), ans.push_back({i, j}), ans.push_back({i, j - 1});
    ans.push_back({i, j}), ans.push_back({i + 1, j}),
        ans.push_back({i + 1, j - 1});
    ans.push_back({i, j}), ans.push_back({i, j - 1}),
        ans.push_back({i + 1, j - 1});
  } else if ((i - 0) && !(j - j0)) {
    ans.push_back({i - 1, j}), ans.push_back({i, j}), ans.push_back({i, j + 1});
    ans.push_back({i, j}), ans.push_back({i - 1, j}),
        ans.push_back({i - 1, j + 1});
    ans.push_back({i, j}), ans.push_back({i, j + 1}),
        ans.push_back({i - 1, j + 1});
  } else {
    ans.push_back({i, j - 1}), ans.push_back({i, j}), ans.push_back({i - 1, j});
    ans.push_back({i, j}), ans.push_back({i, j - 1}),
        ans.push_back({i - 1, j - 1});
    ans.push_back({i, j}), ans.push_back({i - 1, j}),
        ans.push_back({i - 1, j - 1});
  }
  s[i][j] = '0';
}
inline void Fx(vector<pair<int, int> > v, int i, int j) {
  if ((int)v.size() == 1)
    go(v[0], i, j);
  else if ((int)v.size() == 2) {
    for (pair<int, int> t : v) s[t.first][t.second] = '0';
    ans.push_back(v[0]), ans.push_back(v[1]);
    if (v[0].first == v[1].first) {
      if (v[0].first == i)
        ans.push_back({i + 1, j}), go({i + 1, j}, i, j);
      else
        ans.push_back({i, j}), go({i, j}, i, j);
    } else if (v[0].second == v[0].second) {
      if (v[0].second == j)
        ans.push_back({i, j + 1}), go({i, j + 1}, i, j);
      else
        ans.push_back({i, j}), go({i, j}, i, j);
    } else {
      if (v[0].first == i)
        ans.push_back({i + 1, j}), go({i + 1, j}, i, j);
      else
        ans.push_back({i, j}), go({i, j}, i, j);
    }
  } else if ((int)v.size() == 3)
    for (pair<int, int> t : v) s[t.first][t.second] = '0', ans.push_back(t);
  else {
    for (int i = 1; i < 4; i++)
      s[v[i].first][v[i].second] = '0', ans.push_back(v[i]);
    go(v[0], i, j);
  }
}
inline void solve() {
  cin >> n >> m;
  ans.clear();
  N = n - (n & 1), M = m - (m & 1);
  for (int i = 0; i < n; i++) cin >> s[i];
  for (int i = 0; i < N; i += 2)
    for (int j = 0; j < M; j += 2) {
      vector<pair<int, int> > v;
      for (int p = 0; p < 2; p++)
        for (int q = 0; q < 2; q++)
          if (s[i + p][j + q] == '1') v.push_back({i + p, j + q});
      if ((int)v.size()) Fx(v, i, j);
    }
  if (n & 1) {
    for (int j = 0; j < M; j += 2) {
      vector<pair<int, int> > v;
      for (int p = 0; p < 2; p++)
        for (int q = 0; q < 2; q++)
          if (s[(n - 2) + p][j + q] == '1') v.push_back({(n - 2) + p, j + q});
      if ((int)v.size()) Fx(v, (n - 2), j);
    }
  }
  if (m & 1) {
    for (int i = 0; i < N; i += 2) {
      vector<pair<int, int> > v;
      for (int p = 0; p < 2; p++)
        for (int q = 0; q < 2; q++)
          if (s[i + p][(m - 2) + q] == '1') v.push_back({i + p, (m - 2) + q});
      if ((int)v.size()) Fx(v, i, (m - 2));
    }
  }
  if (n & 1 && m & 1) {
    vector<pair<int, int> > v;
    for (int p = 0; p < 2; p++)
      for (int q = 0; q < 2; q++)
        if (s[(n - 2) + p][(m - 2) + q] == '1')
          v.push_back({(n - 2) + p, (m - 2) + q});
    if ((int)v.size()) Fx(v, (n - 2), (m - 2));
  }
  cout << (int)ans.size() / 3 << '\n';
  for (int i = 0; i < (int)ans.size(); i += 3) {
    for (int j = 0; j < 3; j++)
      cout << ans[i + j].first + 1 << ' ' << ans[i + j].second + 1 << ' ';
    cout << '\n';
  }
}
int main() {
  ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  int t = 1;
  cin >> t;
  while (t--) solve();
}
