Problem:
Score : 1000 points

Problem Statement

How many infinite sequences a_1, a_2, ... consisting of {{1, ... ,n}} satisfy the following conditions?

The n-th and subsequent elements are all equal. That is, if n \leq i,j, a_i = a_j.

For every integer i, the a_i elements immediately following the i-th element are all equal. That is, if i < j < k\leq i+a_i, a_j = a_k.

Find the count modulo 10^9+7.

Constraints

1 \leq n \leq 10^6

Input

Input is given from Standard Input in the following format:

n

Output

Print how many sequences satisfy the conditions, modulo 10^9+7.

Sample Input 1

2

Sample Output 1

4

The four sequences that satisfy the conditions are:

1, 1, 1, ...

1, 2, 2, ...

2, 1, 1, ...

2, 2, 2, ...

Sample Input 2

654321

Sample Output 2

968545283

Solution in Rust (1.15.1) (judge verdict: Accepted)

fn get_line() -> String {
    let mut s = String::new();
    std::io::stdin().read_line(&mut s).ok();
    s.trim().to_string()
}

const M: i64 = 1000000000 + 7;
const N: usize = 1000000 + 1;
fn main() {
    let n = get_line().parse().unwrap();

    let mut xs = vec![0; N];
    xs[1] = n;
    xs[2] = n * n % M;

    let mut ys = vec![0; N];
    ys[1] = n;
    ys[2] = (ys[1] + xs[2]) % M;

    for i in 3..(n as usize + 1) {
        xs[i] = xs[i - 1];
        xs[i] += (n - 1) * (n - 1) % M;
        xs[i] += (ys[i - 3] + n - i as i64 + 2) % M;
        xs[i] %= M;
        ys[i] += (ys[i - 1] + xs[i]) % M;
    }

    println!("{}", xs[n as usize]);
}