셔플
시간 제한1초메모리 제한128 MB
1부터 n까지 순서대로 놓인 카드 더미에 shuffle 연산을 m번 적용한 뒤, 위에서 p번째부터 q번째 사이에 있는 카드 중 r 이하인 것의 개수를 센다. n이 10억까지 커서 카드 배열을 직접 만들 수 없다.
문제
부터 까지 번호가 적힌 카드 장이 있다. 처음에는 맨 위가 번호 인 카드, 위에서 두 번째가 번호 인 카드, …, 맨 아래가 번호 인 카드가 되도록 차례로 쌓아 카드 더미를 만든다.

이 카드 더미에 대해 다음과 같은 「셔플」연산을 수행하여 카드를 재배열한다. 여기서 는 을 만족하는 정수이다.
- 셔플
- 장의 카드를 맨 위에서부터 번째까지의 카드로 이루어진 더미 , 번째부터 번째까지의 카드로 이루어진 더미 , 번째부터 번째까지의 카드로 이루어진 더미 의 세 더미로 나눈다. 그런 다음 더미 위에 더미 를 얹고, 다시 그 위에 더미 를 얹는다.
예를 들어 순서대로 놓인 장의 카드에 「셔플」을 수행하면, 카드에 적힌 번호는 위에서부터 차례로 이 된다.

처음 상태에서 번의 셔플 「셔플」, 「셔플」, …, 「셔플」을 순서대로 수행한 뒤의 카드 더미에서, 위에서부터 세어 번째부터 번째까지의 카드 중 번호가 이하인 카드가 몇 장 포함되어 있는지 구하는 프로그램을 작성하라.
입력
입력은 개의 줄로 이루어진다.
- 번째 줄: 카드의 장수 ().
- 번째 줄: 셔플 횟수 ().
- 번째 줄: 정수 (, ).
- 번째 줄 (): 공백으로 구분된 두 정수 ().
출력
번의 셔플 후의 카드 더미에서, 위에서부터 세어 번째부터 번째까지의 카드 중 번호가 이하인 카드의 장수를 출력하라.
힌트
장의 더미에 「셔플」을 수행하면 카드는 위에서부터 이 된다. 위에서 번째부터 번째까지 중 번호가 이하인 카드는 번호 와 번호 의 장이다.
장의 더미에 「셔플」, 「셔플」, 「셔플」을 차례로 수행하면 카드는 위에서부터 가 된다. 위에서 번째부터 번째까지 중 번호가 이하인 카드는 장이다.