#include #include using namespace std; using ll = long long; int main(){ ll H, W; cin >> H >> W; vector> A(H, vector(W)); for (ll i = 0; i < H; i++){ for (ll j = 0; j < W; j++){ cin >> A[i][j]; } } ll Q; cin >> Q; vector X(Q); for (ll i = 0; i < Q; i++){ cin >> X[i]; } vector B; for (ll i = 0; i < H; i++){ for (ll j = 0; j < W; j++){ B.push_back(A[i][j]); } } ll len = H * W; vector now_x(Q); for (ll i = 0; i < Q; i++){ now_x[i] = X[i]; } vector> vecs(len + Q, vector(len)); for (ll i = 0; i < len; i++){ vecs[i][i] = 1; } for (ll i = 0; i < len; i++){ ll msb = -1; for (ll j = 0; j < 60; j++){ if ((B[i] >> j) & 1){ msb = j; } } if (msb == -1){ continue; } for (ll j = i + 1; j < len; j++){ if ((B[j] >> msb) & 1){ B[j] ^= B[i]; for (ll k = 0; k < len; k++){ vecs[j][k] ^= vecs[i][k]; } } } for (ll j = 0; j < Q; j++){ if ((now_x[j] >> msb) & 1){ now_x[j] ^= B[i]; for (ll k = 0; k < len; k++){ vecs[len + j][k] ^= vecs[i][k]; } } } } for (ll i = 0; i < Q; i++){ if (X[i] == 0){ cout << 3 << endl; cout << 1 << " " << 1 << endl; cout << 1 << " " << 2 << endl; cout << 1 << " " << 1 << endl; cout << 1 << " " << 2 << endl; continue; } if (now_x[i] != 0){ cout << -1 << endl; continue; } vector> moves(H); for (ll j = 0; j < len; j++){ if (vecs[len + i][j] == 1){ ll h = j / W; ll w = j % W; moves[h].push_back(w); } } ll now_y = 0; vector> ans; for (ll i = 0; i < H; i++){ if (moves[i].size() == 0){ continue; } ll len_moves = moves[i].size(); for (ll j = 0; j < len_moves; j++){ ans.push_back(make_pair(i, moves[i][j])); } } ll K = ans.size() - 1; cout << K << endl; for (ll i = 0; i < K + 1; i++){ cout << ans[i].first + 1 << " " << ans[i].second + 1 << endl; } } }