각 재료의 사용 횟수가 짝수가 되도록, 즉 선택한 recipe 벡터들의 XOR이 영벡터가 되도록 최대 개수의 recipe를 고른다.
어려움8수학비트 연산그리디아직 제출이 없습니다시간 제한8초메모리 제한512 MB타로는 요즘 도시락 만들기에 빠져 있다. 오늘 새 도시락 요리책을 손에 넣었고, 책에 실린 요리법을 하루에 되도록 많이 시도해 보려고 한다.
요리법에 필요한 재료는 모두 넉넉히 있지만, 재료는 하나같이 두 개들이 진공 팩으로 포장되어 있다. 팩을 뜯어 하나만 쓰고 나머지를 남기면 남은 재료는 금방 상한다. 그렇다고 같은 요리법으로 두 개를 만드는 것은 재미가 없다. 그래서 타로는 서로 다른 요리법만 골라 도시락을 만들되 재료를 하나도 남기지 않기로 했다. 고른 요리법 전체에서 어떤 재료를 쓴 횟수가 짝수여야 그 재료를 팩 단위로 남김없이 쓴다.
요리책에는 재료 구성이 똑같은 서로 다른 요리법이 실려 있을 수도 있다. 이런 요리법도 서로 다른 요리법으로 센다.
아무 요리법도 고르지 않아도 되고, 그때 답은 0이다. 타로가 오늘 시도할 수 있는 요리법은 최대 몇 개인가?
입력은 데이터 집합 최대 50개로 이루어지고, 각 데이터 집합의 형식은 다음과 같다.
n m
b1,1...b1,m
...
bn,1...bn,m
첫 줄에는 요리책에 실린 요리법의 수 n과 재료의 종류 수 m이 주어진다. n과 m은 양의 정수이고 1≤n≤500, 1≤m≤500, 1≤n×m≤500을 만족한다. 이어지는 n개의 줄에는 각 요리법의 정보가 0과 1로 이루어진 길이 m의 문자열로 주어진다. bi,j가 1이면 i번째 요리법에 j번째 재료가 필요하고, 0이면 필요하지 않다. 각 줄에는 1이 적어도 하나 있다.
입력의 끝은 0이 두 개 적힌 줄로 표시한다.
각 데이터 집합마다 타로가 시도할 수 있는 요리법의 최대 개수를 한 줄에 하나씩 출력한다.