만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

준근이와 마법 공방

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

요약
매 단계마다 현재 가장 큰 두 마나석의 합으로 새 마나석을 만들 때, N번째로 만든 마나석의 값을 10^9+7로 나눈 나머지를 구합니다.
난이도

보통10점 중 5점

유형
수학, 구현
정답자
아직 제출이 없습니다

문제

마법사 준근이는 작은 마법 공방을 운영한다. 준근이의 공방에서는 여러 개의 마력석을 합성해 더 좋은 마력석을 만드는 일을 한다. 어느 날 준근이는 일이 귀찮아져서 마력석을 자동으로 합성하는 기계를 만들기로 한다.

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

  • 준근이가 가지고 있는 마력석을 모두 기계에 넣는다.
  • 기계는 투입된 마력석 중 22개를 선택한다.
  • 선택한 두 마력석을 합쳐 새로운 마력석을 만든다. 새 마력석의 마나 수치는 재료로 쓴 두 마력석의 마나 수치의 합이다. 재료로 쓴 마력석은 사라지지 않는다.
    • 새 마력석을 만들 때는 항상 만들 수 있는 새 마력석 중 마나 수치가 가장 큰 마력석을 만든다.
    • 이 과정으로 만들어진 새 마력석도 이후에 재료로 쓸 수 있다.
  • 재료로 쓰지 않은 마력석, 재료로 쓴 마력석, 새 마력석을 결과물로 반환한다. 준근이는 이 결과물을 다시 가져간다.

준근이는 기계를 가동하기 전에 위 과정을 NN번 반복했을 때 마지막에 만들어질 마력석의 마나 수치를 알고 싶어 한다. 처음에 마나 수치가 a1a_1, a2a_2, a3a_3, ⋯\cdots, aMa_M인 마력석 MM개를 기계에 넣었을 때 마지막에 만들어질 마력석의 마나 수치를 구하는 프로그램을 만들어 보자.

입력

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

두 번째 줄에 정수 a1a_1, a2a_2, a3a_3, ⋯\cdots, aMa_M이 공백으로 구분되어 주어진다.

출력

첫 번째 줄에 마지막으로 만들어질 마력석의 마나 수치를 출력한다. 수치의 절댓값이 매우 클 수 있으므로, 수치를 세 정수 pp, qq, rr을 사용한 식 p×q+rp \times q + r로 나타낼 때 rr을 대신 출력한다. (0≤r<p=109+70 \le r < 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≤ai≤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