준근이와 마법 공방

시간 제한1초메모리 제한1024 MB

요약
재료가 사라지지 않는 상태에서 매번 만들 수 있는 가장 큰 합의 마력석을 새로 만드는 과정을 N번 반복하고, 마지막에 만들어진 마력석의 마나 수치를 10^9+7로 나눈 나머지로 출력합니다.
난이도

보통10점 중 7점

유형
정렬, 그리디, 구현, 정수론
정답자
아직 제출이 없습니다

문제

마법사 준근이는 작은 마법 공방을 운영하고 있다. 준근이네 마법 공방에서는 여러 개의 마력석을 이용해 더 좋은 마력석을 합성해 주는 일을 하고 있다. 어느 날 문득 준근이는 일하기가 귀찮아져 기가 막힌 아이디어를 떠올리게 되는데, 바로 마력석을 자동으로 합성해 주는 기계를 제작하는 것이다!

기계의 마력석 합성은 다음과 같은 과정을 따른다.

  • 준근이가 가지고 있는 마력석들을 모두 기계에 넣는다.

  • 기계는 투입된 마력석 중 22개를 선택한다.

  • 선택한 두 마력석을 합쳐 새로운 마력석을 만들어낸다. 만들어진 마력석의 마나 수치는 재료로 사용한 마력석의 마나 수치의 합이다. 이때, 재료로 사용한 마력석은 사라지지 않는다.

    • 새로운 마력석을 만들 때에는 항상 만들 수 있는 새로운 마력석 중 가장 마나 수치가 큰 마력석을 만들어낸다.
    • 위 과정으로 만들어진 새로운 마력석도 이후에 재료로 사용할 수 있다.
  • 재료로 사용하지 않은 마력석, 재료로 사용한 마력석, 새로운 마력석을 결과물로 반환한다. 준근이는 이 결과물을 다시 가져간다.

준근이는 이 기계를 가동하기 전 위와 같은 과정을 NN번 반복했을 때 마지막에 만들어질 마력석의 마나 수치를 알고 싶어졌다. 처음에 마나 수치 a_1a\_1, a_2a\_2, a_3a\_3, ⋯\cdots, a_Ma\_M을 가진 마력석 MM개를 기계에 넣었을 때 마지막에 만들어질 마력석의 마나 수치를 구하는 프로그램을 만들어서 준근이를 도와주자!

입력

첫 번째 줄에 NN, MM이 공백으로 구분되어 주어진다.

두 번째 줄에 정수 a_1a\_1, a_2a\_2, a_3a\_3, ⋯\cdots, a_Ma\_M이 공백으로 구분되어 주어진다.

출력

첫 번째 줄에 마지막으로 만들어질 마력석의 마나 수치를 출력한다. 그 수치의 절댓값이 매우 클 수 있으므로 수치를 세 정수 pp, qq, rr에 관한 식 p×q+rp \times q + r로 표현할 때, rr을 대신 출력한다. (0≤r<p=109+7)(0 \le r \lt p=10^9+7)

제한

  • 1≤N≤1,000,0001 \le N \le 1\\,000\\,000
  • 2≤M≤100,0002 \le M \le 100\\,000
  • −100,000≤a_i≤100,000-100\\,000 \le a\_i \le 100\\,000

예제3

  1. 예제 1

    입력
    1 2
    -1 -1
    
    예상 출력
    1000000005
    
  2. 예제 2

    입력
    2 3
    1 4 2
    
    예상 출력
    10
    
  3. 예제 3

    입력
    100 5
    1 6 3 0 4
    
    예상 출력
    445205243