Problem:
Score : 400 points

Problem Statement

We have N+1 integers: 10^{100}, 10^{100}+1, ..., 10^{100}+N.

We will choose K or more of these integers. Find the number of possible values of the sum of the chosen numbers, modulo (10^9+7).

Constraints

1 \leq N \leq 2\times 10^5

1 \leq K \leq N+1

All values in input are integers.

Input

Input is given from Standard Input in the following format:

N K

Output

Print the number of possible values of the sum, modulo (10^9+7).

Sample Input 1

3 2

Sample Output 1

10

The sum can take 10 values, as follows:

(10^{100})+(10^{100}+1)=2\times 10^{100}+1

(10^{100})+(10^{100}+2)=2\times 10^{100}+2

(10^{100})+(10^{100}+3)=(10^{100}+1)+(10^{100}+2)=2\times 10^{100}+3

(10^{100}+1)+(10^{100}+3)=2\times 10^{100}+4

(10^{100}+2)+(10^{100}+3)=2\times 10^{100}+5

(10^{100})+(10^{100}+1)+(10^{100}+2)=3\times 10^{100}+3

(10^{100})+(10^{100}+1)+(10^{100}+3)=3\times 10^{100}+4

(10^{100})+(10^{100}+2)+(10^{100}+3)=3\times 10^{100}+5

(10^{100}+1)+(10^{100}+2)+(10^{100}+3)=3\times 10^{100}+6

(10^{100})+(10^{100}+1)+(10^{100}+2)+(10^{100}+3)=4\times 10^{100}+6

Sample Input 2

200000 200001

Sample Output 2

1

We must choose all of the integers, so the sum can take just 1 value.

Sample Input 3

141421 35623

Sample Output 3

220280457

Solution in C# (Mono-mcs 6.8.0.105) (judge verdict: Accepted)

using System;
class abc163_d{
  public static void Main(){
    String[] str = Console.ReadLine().Split(' ');
    long n = long.Parse(str[0]);
    long k = long.Parse(str[1]);
    long ans=0;
    long min,max;
    long minn = 0, maxn = n;
    long minsum=0, maxsum=0;
    for(long i=k; i<=n+1; i++){
      if(i==k){
        long temp = i;
        while(temp>0){
          minsum+=minn;
          temp--;
          minn++;
        }
        min = minsum;
        temp = i;
        while(temp>0){
          maxsum+=maxn;
          maxn--;
          temp--;
        }
        max = maxsum;
      }
      else{
        minsum += minn;
        maxsum += maxn;
        minn++;
        maxn--;
        max = maxsum;
        min = minsum;
      }
      //Console.WriteLine("{0}: {1}~{2}",i,min,max);
      ans = (ans + max-min+1)%(long)(Math.Pow(10,9)+7);
    }
    Console.WriteLine(ans);
  }
}