## https://yukicoder.me/problems/no/1560 def main(): N, M = map(int, input().split()) S = [] for _ in range(N): S.append(list(map(int, input().split()))) bit_map = {} for bit in range(2 ** M): array = [] for i in range(N): is_ok = True for j in range(M): if (1 << j) & bit > 0: if S[i][j] == 0: is_ok = False break if is_ok: array.append(i) bit_map[bit] = array # dp dp = [0] * (2 ** M) dp[0] = 1 for bit in range(2 ** M): if dp[bit] == 0: continue for j in range(M): if (1 << j) & bit == 0: cnt = 0 for y in bit_map[bit]: if S[y][j] == 1: cnt += 1 if cnt >= (len(bit_map[bit]) + 1) // 2: new_bit = bit | (1 << j) dp[new_bit ] += dp[bit] print(dp[2 ** M - 1]) if __name__ == "__main__": main()