#include <bits/stdc++.h>
using namespace std;
struct point {
  int x[3], y[3];
};
char str[110][110];
int a[110][110][10];
vector<struct point> v;
int N, M;
int main() {
  int T;
  cin >> T;
  while (T--) {
    scanf("%d %d", &N, &M);
    for (int i = 1; i <= N; i++) {
      scanf("%s", str[i] + 1);
    }
    v.clear();
    memset(a, 0, sizeof(a));
    for (int i = 1; i < N; i++) {
      for (int j = 1; j <= M; j++) {
        if (str[i][j] == '1') {
          if (j < M) {
            ++a[i + 1][j][3];
            str[i][j] = '0';
            if (str[i + 1][j] == '0')
              str[i + 1][j] = '1';
            else
              str[i + 1][j] = '0';
            if (str[i + 1][j + 1] == '0')
              str[i + 1][j + 1] = '1';
            else
              str[i + 1][j + 1] = '0';
          } else {
            ++a[i + 1][j][4];
            str[i][j] = '0';
            if (str[i + 1][j] == '0')
              str[i + 1][j] = '1';
            else
              str[i + 1][j] = '0';
            if (str[i + 1][j - 1] == '0')
              str[i + 1][j - 1] = '1';
            else
              str[i + 1][j - 1] = '0';
          }
        }
      }
    }
    for (int j = 1; j < M - 1; j++) {
      if (str[N][j] == '1') {
        if (str[N][j + 1] != '0') {
          ++a[N - 1][j][1];
          ++a[N - 1][j + 1][2];
          str[N][j] = str[N][j + 1] = '0';
        } else {
          ++a[N][j + 1][3];
          ++a[N][j + 1][4];
          if (str[N][j + 2] == '0')
            str[N][j + 2] = '1';
          else
            str[N][j + 2] = '0';
          str[N][j] = '0';
        }
      }
    }
    if (str[N - 1][M - 1] == '1' && str[N - 1][M] == '1' &&
        str[N][M - 1] == '0' && str[N][M] == '1') {
      ++a[N - 1][M][2];
    } else if (str[N - 1][M - 1] == '0' && str[N - 1][M] == '0' &&
               str[N][M - 1] == '1' && str[N][M] == '0') {
      ++a[N][M - 1][3];
      ++a[N - 1][M - 1][1];
      ++a[N][M][4];
    } else if (str[N - 1][M - 1] == '0' && str[N - 1][M] == '0' &&
               str[N][M - 1] == '1' && str[N][M] == '1') {
      ++a[N][M - 1][3];
      ++a[N - 1][M - 1][1];
      ++a[N - 1][M][2];
      ++a[N][M - 1][3];
    } else if (str[N - 1][M - 1] == '1' && str[N - 1][M] == '1' &&
               str[N][M - 1] == '1' && str[N][M] == '1') {
      ++a[N - 1][M - 1][1];
      ++a[N][M][4];
      ++a[N - 1][M][2];
      ++a[N][M - 1][3];
    } else if (str[N - 1][M - 1] == '0' && str[N - 1][M] == '1' &&
               str[N][M - 1] == '0' && str[N][M] == '0') {
      ++a[N - 1][M][2];
      ++a[N - 1][M - 1][1];
      ++a[N][M][4];
    } else if (str[N - 1][M - 1] == '0' && str[N - 1][M] == '1' &&
               str[N][M - 1] == '1' && str[N][M] == '1') {
      ++a[N][M][4];
    } else if (str[N - 1][M - 1] == '0' && str[N - 1][M] == '1' &&
               str[N][M - 1] == '1' && str[N][M] == '0') {
      ++a[N - 1][M][2];
      ++a[N][M - 1][3];
    } else if (str[N - 1][M - 1] == '1' && str[N - 1][M] == '0' &&
               str[N][M - 1] == '0' && str[N][M] == '0') {
      ++a[N - 1][M - 1][1];
      ++a[N - 1][M][2];
      ++a[N][M - 1][3];
    } else if (str[N - 1][M - 1] == '1' && str[N - 1][M] == '0' &&
               str[N][M - 1] == '0' && str[N][M] == '1') {
      ++a[N - 1][M - 1][1];
      ++a[N][M][4];
    } else if (str[N - 1][M - 1] == '0' && str[N - 1][M] == '1' &&
               str[N][M - 1] == '0' && str[N][M] == '1') {
      ++a[N - 1][M][2];
      ++a[N - 1][M - 1][1];
      ++a[N - 1][M][2];
      ++a[N][M - 1][3];
    } else if (str[N - 1][M - 1] == '0' && str[N - 1][M] == '0' &&
               str[N][M - 1] == '0' && str[N][M] == '1') {
      ++a[N][M][4];
      ++a[N - 1][M][2];
      ++a[N][M - 1][3];
    } else if (str[N - 1][M - 1] == '1' && str[N - 1][M] == '0' &&
               str[N][M - 1] == '1' && str[N][M] == '0') {
      ++a[N][M - 1][3];
      ++a[N][M][4];
      ++a[N - 1][M][2];
      ++a[N][M - 1][3];
    } else if (str[N - 1][M - 1] == '1' && str[N - 1][M] == '0' &&
               str[N][M - 1] == '1' && str[N][M] == '1') {
      ++a[N][M - 1][3];
    } else if (str[N - 1][M - 1] == '1' && str[N - 1][M] == '1' &&
               str[N][M - 1] == '0' && str[N][M] == '0') {
      ++a[N - 1][M][2];
      ++a[N][M][4];
      ++a[N - 1][M][2];
      ++a[N][M - 1][3];
    } else if (str[N - 1][M - 1] == '1' && str[N - 1][M] == '1' &&
               str[N][M - 1] == '1' && str[N][M] == '0') {
      ++a[N - 1][M - 1][1];
    }
    for (int i = 1; i <= N; i++) {
      for (int j = 1; j <= M; j++) {
        for (int k = 1; k <= 4; k++) {
          if (a[i][j][k] % 2) {
            if (k == 2) v.push_back({i, i, i + 1, j, j - 1, j});
            if (k == 3) v.push_back({i, i - 1, i, j, j, j + 1});
            if (k == 1) v.push_back({i, i, i + 1, j, j + 1, j});
            if (k == 4) v.push_back({i, i - 1, i, j, j, j - 1});
          }
        }
      }
    }
    printf("%d\n", v.size());
    struct point t;
    for (int i = 0; i < v.size(); i++) {
      t = v[i];
      printf("%d %d ", t.x[0], t.y[0]);
      printf("%d %d ", t.x[1], t.y[1]);
      printf("%d %d\n", t.x[2], t.y[2]);
    }
  }
  return 0;
}
