import copy # 获取可能的组合 def get_list(lst): def b(start, path): if path: result.append(path) for i in range(start, len(lst)): b(i + 1, path + [lst[i]]) result = [] b(0, []) return result # 判断是否可行 def check(lst): for i in range(n): for j in range(m): if lst[i][j] == 0: return False return True n, m, q = map(int, input().split()) c = [] # 草地 for i in range(n): c.append([int(i) for i in input()]) # 方案 my_dict = {} for k in range(q): my_dict[k] = [] for i in range(n): my_dict[k].append([int(i) for i in input()]) if check(c): print(0) else: # 筛选出可行的方案 l = [] for k in range(q): flag = False # 判断方案是否可行 for i in range(n): for j in range(m): if my_dict[k][i][j] + c[i][j] > 1: flag = True break if flag: break if not flag: l.append(k) lll = {} cc = 0 # 计算每种组合是否合规 for ll in get_list(l): c1 = copy.deepcopy(c) for k in ll: for i in range(n): for j in range(m): c1[i][j] += my_dict[k][i][j] if check(c1): lll[cc] = {"len": len(ll), "ll": ll} cc += 1 sorted_lll = sorted(lll.values(), key=lambda x: x["len"]) if len(lll) == 0: print(-1) else: print(sorted_lll[0]["len"]) print(" ".join([str(i + 1) for i in sorted_lll[0]["ll"]]))