공통 1비트 학번 배정
시간 제한5초메모리 제한1024 MB
1부터 m까지의 서로 다른 정수 n개를 골라 AND 값의 1인 비트가 k개 이상이 되는 경우의 수를 998244353으로 나눈 나머지로 구합니다.
문제
학년이 시작될 때 International College of Paper Cutters(ICPC)의 학생들이 학번을 고른다. 학생은 이하의 양의 정수를 하나씩 고를 수 있지만, 두 학생이 같은 학번을 고를 수는 없다.
학생들은 학번끼리 공통점을 가지기를 원한다. 구체적으로, 고른 모든 학번의 비트 AND에서 1인 비트가 적어도 개 있어야 한다. 이렇게 고르는 방법의 수를 구하는 프로그램을 작성하라. 학생 중 한 명이라도 학번이 다르면 두 배정은 다른 것으로 본다.
두 정수 와 의 비트 AND는 번째 비트가 와 에서 모두 1일 때에만 1인 정수 이다. C, C++, Java, Python에서는 \& 연산자로 계산한다. 이 정의는 집합으로도 확장되며, 집합 의 AND에서 번째 비트는 의 모든 원소에서 번째 비트가 1일 때에만 1이다.
입력
첫 줄에 정수 세 개 (), (), ()이 주어진다. 은 학생 수, 는 필요한 공통 1비트의 최소 개수, 은 학번이 가질 수 있는 최댓값이다.
출력
에서 서로 다른 학번 개를 고르는 방법 중, 고른 학번들의 비트 AND에서 1인 비트가 적어도 개인 경우의 수를 출력하라. 답이 클 수 있으므로 으로 나눈 나머지를 출력한다.