H, W = map(int, input().split()) A = [list(map(int, input().split())) for _ in range(H)] Q = int(input()) X = [int(input()) for _ in range(Q)] B = [] for i in range(H): for j in range(W): B.append(A[i][j]) length = H * W now_x = X[:] vecs = [[0] * length for _ in range(length + Q)] for i in range(length): vecs[i][i] = 1 for i in range(length): msb = -1 for j in range(60): if (B[i] >> j) & 1: msb = j if msb == -1: continue for j in range(i + 1, length): if (B[j] >> msb) & 1: B[j] ^= B[i] for k in range(length): vecs[j][k] ^= vecs[i][k] for j in range(Q): if (now_x[j] >> msb) & 1: now_x[j] ^= B[i] for k in range(length): vecs[length + j][k] ^= vecs[i][k] for qi in range(Q): if X[qi] == 0: print(3) print(1, 1) print(1, 2) print(1, 1) print(1, 2) continue if now_x[qi] != 0: print(-1) continue moves = [[] for _ in range(H)] for j in range(length): if vecs[length + qi][j]: h = j // W w = j % W moves[h].append(w) now_y = 0 ans = [] for i in range(H): if not moves[i]: continue idx = -1 len_moves = len(moves[i]) for j in range(len_moves): if moves[i][j] == now_y: idx = j if idx == -1: ans.append((i, now_y)) for w in moves[i]: ans.append((i, w)) ans.append((i, now_y)) else: for j in range(len_moves): ans.append((i, moves[i][(j + idx) % len_moves])) now_y = moves[i][(idx + len_moves - 1) % len_moves] K = len(ans) - 1 print(K) for r, c in ans: print(r + 1, c + 1)