준근이와 마법 공방
시간 제한1초메모리 제한1024 MB
매 단계마다 현재 가장 큰 두 마나석의 합으로 새 마나석을 만들 때, N번째로 만든 마나석의 값을 10^9+7로 나눈 나머지를 구합니다.
문제
마법사 준근이는 작은 마법 공방을 운영한다. 준근이의 공방에서는 여러 개의 마력석을 합성해 더 좋은 마력석을 만드는 일을 한다. 어느 날 준근이는 일이 귀찮아져서 마력석을 자동으로 합성하는 기계를 만들기로 한다.
기계의 마력석 합성 과정은 다음과 같다.
- 준근이가 가지고 있는 마력석을 모두 기계에 넣는다.
- 기계는 투입된 마력석 중 개를 선택한다.
- 선택한 두 마력석을 합쳐 새로운 마력석을 만든다. 새 마력석의 마나 수치는 재료로 쓴 두 마력석의 마나 수치의 합이다. 재료로 쓴 마력석은 사라지지 않는다.
- 새 마력석을 만들 때는 항상 만들 수 있는 새 마력석 중 마나 수치가 가장 큰 마력석을 만든다.
- 이 과정으로 만들어진 새 마력석도 이후에 재료로 쓸 수 있다.
- 재료로 쓰지 않은 마력석, 재료로 쓴 마력석, 새 마력석을 결과물로 반환한다. 준근이는 이 결과물을 다시 가져간다.
준근이는 기계를 가동하기 전에 위 과정을 번 반복했을 때 마지막에 만들어질 마력석의 마나 수치를 알고 싶어 한다. 처음에 마나 수치가 , , , , 인 마력석 개를 기계에 넣었을 때 마지막에 만들어질 마력석의 마나 수치를 구하는 프로그램을 만들어 보자.
입력
첫 번째 줄에 , 이 공백으로 구분되어 주어진다.
두 번째 줄에 정수 , , , , 이 공백으로 구분되어 주어진다.
출력
첫 번째 줄에 마지막으로 만들어질 마력석의 마나 수치를 출력한다. 수치의 절댓값이 매우 클 수 있으므로, 수치를 세 정수 , , 을 사용한 식 로 나타낼 때 을 대신 출력한다. ()