#include <bits/stdc++.h>
using namespace std;
string a[110];
struct node {
  int x, y;
  node(int _x, int _y) : x(_x), y(_y) {}
};
vector<node> v[30010];
int k = 0;
void add(int x, int y, int f) {
  x++;
  y++;
  if (f == 1) {
    v[k].push_back(node(x + 1, y));
    v[k].push_back(node(x, y));
    v[k].push_back(node(x, y + 1));
    k++;
  } else if (f == 2) {
    v[k].push_back(node(x + 1, y + 1));
    v[k].push_back(node(x, y));
    v[k].push_back(node(x, y + 1));
    k++;
  } else if (f == 3) {
    v[k].push_back(node(x + 1, y));
    v[k].push_back(node(x, y));
    v[k].push_back(node(x + 1, y + 1));
    k++;
  } else if (f == 4) {
    v[k].push_back(node(x + 1, y));
    v[k].push_back(node(x, y + 1));
    v[k].push_back(node(x + 1, y + 1));
    k++;
  }
  x--;
  y--;
  for (int i = x; i <= x + 1; ++i) {
    for (int j = y; j <= y + 1; ++j) {
      a[i][j] = '0';
    }
  }
}
void fan(int x, int y) {
  if (a[x - 1][y - 1] == '1')
    a[x - 1][y - 1] = '0';
  else
    a[x - 1][y - 1] = '1';
}
void add1(int x, int y, int f) {
  x++;
  y++;
  if (f == 1) {
    v[k].push_back(node(x + 1, y));
    v[k].push_back(node(x, y));
    v[k].push_back(node(x, y + 1));
    fan(x + 1, y);
    fan(x, y);
    fan(x, y + 1);
    k++;
  } else if (f == 2) {
    v[k].push_back(node(x + 1, y + 1));
    v[k].push_back(node(x, y));
    v[k].push_back(node(x, y + 1));
    fan(x + 1, y + 1);
    fan(x, y);
    fan(x, y + 1);
    k++;
  } else if (f == 3) {
    v[k].push_back(node(x + 1, y));
    v[k].push_back(node(x, y));
    v[k].push_back(node(x + 1, y + 1));
    fan(x + 1, y);
    fan(x, y);
    fan(x + 1, y + 1);
    k++;
  } else if (f == 4) {
    v[k].push_back(node(x + 1, y));
    v[k].push_back(node(x, y + 1));
    v[k].push_back(node(x + 1, y + 1));
    fan(x + 1, y);
    fan(x, y + 1);
    fan(x + 1, y + 1);
    k++;
  }
}
void solve(int x, int y) {
  x--;
  y--;
  int t = 0;
  t = t * 10 + (int)(a[x][y] - '0');
  t = t * 10 + (int)(a[x][y + 1] - '0');
  t = t * 10 + (int)(a[x + 1][y] - '0');
  t = t * 10 + (int)(a[x + 1][y + 1] - '0');
  if (t == 0) {
    return;
  }
  if (t == 1) {
    add(x, y, 3);
    add(x, y, 2);
    add(x, y, 4);
  }
  if (t == 10) {
    add(x, y, 1);
    add(x, y, 4);
    add(x, y, 3);
  }
  if (t == 11) {
    add(x, y, 1);
    add(x, y, 2);
  }
  if (t == 100) {
    add(x, y, 4);
    add(x, y, 1);
    add(x, y, 2);
  }
  if (t == 101) {
    add(x, y, 1);
    add(x, y, 3);
  }
  if (t == 110) {
    add(x, y, 3);
    add(x, y, 2);
  }
  if (t == 111) {
    add(x, y, 4);
  }
  if (t == 1000) {
    add(x, y, 2);
    add(x, y, 3);
    add(x, y, 1);
  }
  if (t == 1001) {
    add(x, y, 1);
    add(x, y, 4);
  }
  if (t == 1010) {
    add(x, y, 2);
    add(x, y, 4);
  }
  if (t == 1011) {
    add(x, y, 3);
  }
  if (t == 1100) {
    add(x, y, 4);
    add(x, y, 3);
  }
  if (t == 1101) {
    add(x, y, 2);
  }
  if (t == 1110) {
    add(x, y, 1);
  }
  if (t == 1111) {
    add(x, y, 1);
    add(x, y, 3);
    add(x, y, 2);
    add(x, y, 4);
  }
}
int main() {
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  int T;
  cin >> T;
  while (T--) {
    for (int i = 0; i < k; ++i) v[i].clear();
    k = 0;
    int n, m;
    cin >> n >> m;
    for (int i = 1; i <= n; ++i) {
      cin >> a[i - 1];
    }
    for (int i = 1; i < n - 1; ++i) {
      for (int j = 1; j <= m; ++j) {
        if (a[i - 1][j - 1] == '1') {
          if (j != m) {
            add1(i - 1, j - 1, 1);
          } else
            add1(i - 1, j - 2, 4);
        }
      }
    }
    for (int j = 1; j < m - 1; ++j) {
      if (a[n - 2][j - 1] == '1') {
        if (a[n - 1][j - 1] == '1')
          add1(n - 2, j - 1, 1);
        else
          add1(n - 2, j - 1, 2);
      } else if (a[n - 1][j - 1] == '1')
        add1(n - 2, j - 1, 4);
    }
    solve(n - 1, m - 1);
    cout << k << endl;
    for (int i = 0; i < k; ++i) {
      for (int j = 0; j < v[i].size(); ++j) {
        cout << v[i][j].x << " " << v[i][j].y << " ";
      }
      cout << endl;
    }
  }
}
