만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

모든 쌍의 유사도

시간 제한2초메모리 제한2048 MB

요약
길이 K인 비트열 N개가 주어질 때, 각 소가 자기 자신을 포함한 모든 비트열과의 자카드 유사도 합을 10^9+7로 나눈 나머지로 구합니다.
난이도

보통10점 중 7점

유형
비트 연산, 동적 계획법, 수학
정답자
아직 제출이 없습니다

문제

농부 존의 소 NN마리(1≤N≤5⋅1051\le N\le 5\cdot 10^5)에게는 각각 길이 KK인 비트열이 하나씩 할당되어 있다(1≤K≤201\le K\le 20). 비트열은 모두 0이 아닌 값이다. 서로 다른 소에게 같은 비트열이 할당될 수도 있다. 두 비트열의 자카드 유사도는 비트 AND 결과의 1의 개수를 비트 OR 결과의 1의 개수로 나눈 값이다. 예를 들어 11001과 11010의 자카드 유사도는 2/42/4이다. 각 소에 대해, 자신의 비트열과 자기 자신을 포함한 NN마리 소의 비트열 각각이 이루는 자카드 유사도를 모두 더한 값을 109+710^9+7로 나눈 나머지로 출력한다. 합이 서로소인 정수 aa, bb에 대해 a/ba/b이면, bx−abx-a가 109+710^9+7로 나누어떨어지는 [0,109+7)[0, 10^9+7) 범위의 정수 xx를 출력한다.

입력

첫 줄에 NN과 KK가 주어진다. 다음 NN개의 줄에는 각각 길이 KK의 이진 표현이 나타내는 정수 i∈(0,2K)i \in (0, 2^K)가 주어진다.

출력

각 소에 대해 합을 109+710^9+7로 나눈 나머지를 한 줄에 하나씩 출력한다.

힌트

소에 할당된 비트열은 01, 01, 10, 11이다. 첫 번째 소의 합은 sim(1,1)+sim(1,1)+sim(1,2)+sim(1,3)=1+1+0+12≡500000006(mod109+7)\text{sim}(1,1)+\text{sim}(1,1)+\text{sim}(1,2)+\text{sim}(1,3)=1+1+0+\frac{1}{2}\equiv 500000006 \pmod{10^9+7}이다. 두 번째 소의 비트열은 첫 번째 소와 같으므로 합도 같다. 세 번째 소의 합은 sim(2,1)+sim(2,1)+sim(2,2)+sim(2,3)=0+0+1+12≡500000005(mod109+7)\text{sim}(2,1)+\text{sim}(2,1)+\text{sim}(2,2)+\text{sim}(2,3)=0+0+1+\frac{1}{2}\equiv 500000005 \pmod{10^9+7}이다.

예제1

  1. 예제 1

    입력
    4 2
    1
    1
    2
    3
    
    예상 출력
    500000006
    500000006
    500000005
    500000006