import sys import itertools def main(): input = sys.stdin.read().split() idx = 0 N, K = int(input[idx]), int(input[idx+1]) idx +=2 points_input = [] for _ in range(N): s = input[idx] digits = tuple(map(int, list(s))) points_input.append(digits) idx += 1 # Generate all possible points (K-dimensional) all_points = list(itertools.product(range(5), repeat=K)) code_to_idx = {p:i for i, p in enumerate(all_points)} total_points = len(all_points) # Initialize presence and cumsum presence = [0] * total_points for p in points_input: idx_p = code_to_idx[p] presence[idx_p] = 1 cumsum = presence.copy() # Precompute code to index mapping for all points for d in range(K): # Sort all points in decreasing order of current dimension d sorted_points = sorted(all_points, key=lambda x: x[d], reverse=True) # Temporary array to hold new cumsum values for this dimension new_cumsum = [0] * total_points # For each point in sorted order (by dimension d) for p in sorted_points: code = code_to_idx[p] current_sum = cumsum[code] current_val = p[d] if current_val < 4: q = list(p) q[d] = current_val + 1 q_tuple = tuple(q) q_code = code_to_idx[q_tuple] current_sum += new_cumsum[q_code] new_cumsum[code] = current_sum # Update cumsum after processing dimension d cumsum = new_cumsum # Now check each input point count = 0 for p in points_input: code = code_to_idx[p] # The sum includes itself, so if sum is >=2, it's sellable if cumsum[code] >= 2: count += 1 print(count) if __name__ == '__main__': main()