# 读取输入 n, m, q = map(int, input().split()) # 存储草地初始状态 grass = [input() for _ in range(n)] # 存储所有烟花燃放计划 plans = [] for _ in range(q): plan = [input() for _ in range(n)] plans.append(plan) # 初始化最小计划数量为一个较大值 min_count = float("inf") min_combination = None # 遍历所有可能的计划组合 for mask in range(1 << q): combined_plan = [["0"] * m for _ in range(n)] selected_plans = [] # 确定当前组合中选择了哪些计划 for i in range(q): if mask & (1 << i): selected_plans.append(i + 1) for x in range(n): for y in range(m): if plans[i][x][y] == "1": combined_plan[x][y] = "1" valid = True for x in range(n): for y in range(m): if grass[x][y] == "1" and combined_plan[x][y] == "1": valid = False break if grass[x][y] == "0" and combined_plan[x][y] == "0": valid = False break if not valid: break if valid and len(selected_plans) < min_count: min_count = len(selected_plans) min_combination = selected_plans if min_combination is None: print(-1) else: print(min_count) print(*min_combination)