주식을 안전하게 (Hard)
시간 제한1초메모리 제한1024 MB
일별 금액 변동량이 주어진 선형 점화식 D_n + c D_{n-1} + ... = 0을 만족할 때 k일 차 잔액 M_k의 최솟값을 10^9+7로 나눈 나머지를 구한다.
문제
주의: 주식을 안전하게(Hard) 문제는 주식을 안전하게(Easy) 문제와 구해야 하는 값이 다르다.
요즘 김한양의 최대 관심사는 주식이다. 7번 연속 주식 투자에 실패했지만, 이번에는 성공할 수 있도록 직접 주식 자동 매매를 할 수 있는 인공지능을 개발했고, 이 인공지능이 김한양을 대신해서 주식 투자를 할 예정이다.
주식 거래를 위해 개설한 통장에는 매일 임의의 금액(원)이 담겨 있다. 일 차 초기 금액 부터 시작하여 인공지능이 주식 투자를 한 지 ()일 차가 되었을 때 통장에 있는 금액(원)을 이라 하자. 편의상 통장에서 매일 얻거나 잃을 수 있는 금액에는 제한이 없고, 금액이 음수라면 그만큼 빚이 있는 것으로 생각한다.
김한양은 인공지능을 완전히 믿지 않는다. 혹여나 인공지능이 실수한다면 큰 손실이 일어날 수도 있으므로 인공지능이 안전하게 투자했는지 확인할 수 있는 기준을 세웠다. 당일을 기준으로, 오늘 통장에 있는 금액에서 어제 통장에 있었던 금액을 뺀 값을 금액 변동량이라 할 때, 김한양은 이 금액 변동량이 특정한 기준치 이상일 때만 인공지능이 당일에 안전하게 주식 투자를 했다고 생각하기로 정했다. 일 차에서의 이 기준치를 이라 할 때, 김한양은 의 값을 다음과 같이 계산할 것이다.
초깃값을 계산하기 위해 고려한 기간(일)을 라 할 때, 일 차부터 일 차까지 일 차에서의 기준치는 실제 금액 변동량인 로 직접 계산한다. 이후 일 차부터 일 차에서의 기준치 은 잠재적인 이익 및 손실의 비율을 나타낸 상수 에 대하여 다음 등식을 만족시키는 값으로 계산한다.
김한양의 경제학과 친구 한누리는 김한양이 만든 이 기준만으로는 인공지능이 안전하게 주식 투자를 하고 있는지 확인할 수 없다고 생각한다. 이를 김한양에게 설명하기 위해 일차의 기준치 의 값을 직접 계산하는 프로그램을 여러분의 도움을 받아 만들었다.
그러나 한누리는 이 프로그램만 가지고 김한양에게 설명하기에는 아직 부족하다고 느꼈다. 이번에는 인공지능이 안전하게 주식 투자를 한 지 일 차일 때, 통장에 남은 금액인 의 최솟값을 계산하는 프로그램이 필요하다. 한누리를 또 도와주자!
입력
첫 줄에는 세 정수 , , 가 공백을 사이로 해서 주어진다.
다음 줄에는 일 차부터 일 차까지 각 일 차마다 통장에 있는 금액을 나타내는 개의 정수 이 공백을 사이로 해서 주어진다.
출력
인공지능이 안전하게 주식 투자를 한 지 일 차일 때, 통장에 남은 금액인 의 최솟값을 로 나눈 나머지를 출력한다.
힌트
두 정수 , 가 임의의 두 정수 , 에 대하여 로 표현할 수 있을 때, 을 를 로 나눈 나머지라고 한다.