#include <bits/stdc++.h>
using namespace std;
void redirect_io() { freopen("input", "r", stdin); }
void fast_io() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
}
template <typename Head>
void print(Head &&h) {
  std::cout << h << std::endl;
}
template <typename Head, typename... Tail>
void print(Head &&h, Tail &&...t) {
  std::cout << h << " ";
  print(std::forward<Tail &&>(t)...);
}
vector<int> solve4(vector<vector<int>> &ar, int i, int j) {
  vector<int> sol = {i, j, i + 1, j, i, j + 1};
  return sol;
}
vector<int> solve3(vector<vector<int>> &ar, int i, int j) {
  vector<int> sol;
  for (int x = 0; x < 2; x++) {
    for (int y = 0; y < 2; y++) {
      if (ar[i + x][j + y] == 1) {
        sol.push_back(i + x);
        sol.push_back(j + y);
      }
    }
  }
  return sol;
}
vector<int> solve2(vector<vector<int>> &ar, int i, int j) {
  vector<int> sol;
  int z = 0;
  for (int x = 0; x < 2; x++) {
    for (int y = 0; y < 2; y++) {
      if (ar[i + x][j + y] == 0 || z == 1) {
        sol.push_back(i + x);
        sol.push_back(j + y);
      } else {
        z = 1;
      }
    }
  }
  return sol;
}
vector<int> solve1(vector<vector<int>> &ar, int i, int j) {
  vector<int> sol;
  int z = 0;
  for (int x = 0; x < 2; x++) {
    for (int y = 0; y < 2; y++) {
      if (ar[i + x][j + y] == 1 || z == 1) {
        sol.push_back(i + x);
        sol.push_back(j + y);
      } else {
        z = 1;
      }
    }
  }
  return sol;
}
int main() {
  fast_io();
  int n, m, t, cnt;
  cin >> t;
  while (t--) {
    cin >> n >> m;
    vector<string> s(n);
    vector<vector<int>> ar(n, vector<int>(m));
    vector<int> res;
    for (int i = 0; i < n; i++) {
      cin >> s[i];
      for (int j = 0; j < s[i].size(); j++) {
        ar[i][j] = s[i][j] - '0';
      }
    }
    vector<vector<int>> sol;
    for (int i = 0; i < n - 1; i += 2) {
      for (int j = 0; j < m - 1; j += 2) {
        cnt = ar[i][j] + ar[i + 1][j] + ar[i][j + 1] + ar[i + 1][j + 1];
        if (cnt == 0) {
          continue;
        }
        while (cnt != 0) {
          cnt = ar[i][j] + ar[i + 1][j] + ar[i][j + 1] + ar[i + 1][j + 1];
          if (cnt == 0) {
            break;
          }
          if (cnt == 4) {
            res = solve4(ar, i, j);
          }
          if (cnt == 1) {
            res = solve1(ar, i, j);
          }
          if (cnt == 2) {
            res = solve2(ar, i, j);
          }
          if (cnt == 3) {
            res = solve3(ar, i, j);
          }
          for (int x = 0; x < res.size(); x += 2) {
            ar[res[x]][res[x + 1]] ^= 1;
          }
          sol.push_back(res);
        }
      }
    }
    int i = n - 2, j = m - 2;
    j = m - 2;
    for (int i = 0; i < n - 1; i += 2) {
      cnt = ar[i][j] + ar[i + 1][j] + ar[i][j + 1] + ar[i + 1][j + 1];
      while (cnt != 0) {
        cnt = ar[i][j] + ar[i + 1][j] + ar[i][j + 1] + ar[i + 1][j + 1];
        if (cnt == 0) {
          break;
        }
        if (cnt == 4) {
          res = solve4(ar, i, j);
        }
        if (cnt == 1) {
          res = solve1(ar, i, j);
        }
        if (cnt == 2) {
          res = solve2(ar, i, j);
        }
        if (cnt == 3) {
          res = solve3(ar, i, j);
        }
        assert(res.size() == 6);
        for (int x = 0; x < res.size(); x += 2) {
          ar[res[x]][res[x + 1]] ^= 1;
        }
        sol.push_back(res);
      }
    }
    i = n - 2;
    for (int j = 0; j < m - 1; j += 2) {
      cnt = ar[i][j] + ar[i + 1][j] + ar[i][j + 1] + ar[i + 1][j + 1];
      while (cnt != 0) {
        cnt = ar[i][j] + ar[i + 1][j] + ar[i][j + 1] + ar[i + 1][j + 1];
        if (cnt == 0) {
          break;
        }
        if (cnt == 4) {
          res = solve4(ar, i, j);
        }
        if (cnt == 1) {
          res = solve1(ar, i, j);
        }
        if (cnt == 2) {
          res = solve2(ar, i, j);
        }
        if (cnt == 3) {
          res = solve3(ar, i, j);
        }
        assert(res.size() == 6);
        for (int x = 0; x < res.size(); x += 2) {
          ar[res[x]][res[x + 1]] ^= 1;
        }
        sol.push_back(res);
      }
    }
    cnt = ar[i][j] + ar[i + 1][j] + ar[i][j + 1] + ar[i + 1][j + 1];
    i = n - 2;
    j = m - 2;
    while (cnt != 0) {
      cnt = ar[i][j] + ar[i + 1][j] + ar[i][j + 1] + ar[i + 1][j + 1];
      if (cnt == 0) {
        break;
      }
      if (cnt == 4) {
        res = solve4(ar, i, j);
      }
      if (cnt == 1) {
        res = solve1(ar, i, j);
      }
      if (cnt == 2) {
        res = solve2(ar, i, j);
      }
      if (cnt == 3) {
        res = solve3(ar, i, j);
      }
      assert(res.size() == 6);
      for (int x = 0; x < res.size(); x += 2) {
        ar[res[x]][res[x + 1]] ^= 1;
      }
      sol.push_back(res);
    }
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < m; j++) {
        assert(ar[i][j] == 0);
      }
    }
    cout << sol.size() << "\n";
    for (vector<int> &v : sol) {
      for (int v1 : v) {
        cout << v1 + 1 << " ";
      }
      cout << "\n";
    }
  }
  return 0;
}
