智乃的果子
题号:NC309429
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
64bit IO Format: %lld

题目描述

\hspace{15pt}智乃有 n 种不同的果子,第 i 种果子有 c_i 个,重量为 w_i初始时共有 \textstyle\sum_{i=1}^{n} c_{i} 堆,每堆只包含 1 个果子,其重量等于该果子的重量。

\hspace{15pt}智乃可以使用一个操作将任意两堆果子合并成一堆,合并的代价与合并后新堆的重量均为两堆的重量之和。
\hspace{15pt}显然,假设有 m 堆果子,则进行 m-1 次合并操作后,所有果子都会被合并成同一堆。
\hspace{15pt}智乃想知道她把这些果子合并成一堆的最小代价之和是多少。由于答案可能很大,请将答案对 (10^9+7) 取模后输出。

输入描述:

\hspace{15pt}第一行输入一个正整数 n\left(1\leq n \leq 10^5\right),表示果子的种类数。
\hspace{15pt}此后 n 行,第 i 行输入两个正整数 c_i,w_i\left(1\leq c_i,w_i \leq 10^6\right),表示第 i 种果子的个数和重量。

输出描述:

\hspace{15pt}仅一行一个正整数,表示将所有果子合并成一堆的最小代价之和,对 (10^9+7) 取模后的结果。
示例1

输入

复制
3
2 1
1 3
1 4

输出

复制
16

说明

\hspace{15pt}在这个样例中,初始时共有 4 堆果子,重量分别为 \{1, 1, 3, 4\}。一种可行的合并方案是:
\hspace{23pt}\bullet\,合并重量为 1 的两堆果子,代价为 2,场上剩下的果子重量为 \{2, 3, 4\}
\hspace{23pt}\bullet\,合并重量为 23 的两堆果子,代价为 5,场上剩下的果子重量为 \{4, 5\}
\hspace{23pt}\bullet\,合并重量为 45 的两堆果子,代价为 9,场上剩下的果子重量为 \{9\}
\hspace{15pt}综上,总代价为 2 + 5 + 9 = 16
示例2

输入

复制
1
1 1

输出

复制
0

说明

\hspace{15pt}注意如果不需要合并,则代价为 0