Problem:
Score : 400 points

Problem Statement

Akari has n kinds of flowers, one of each kind.

She is going to choose one or more of these flowers to make a bouquet.

However, she hates two numbers a and b, so the number of flowers in the bouquet cannot be a or b.

How many different bouquets are there that Akari can make?

Find the count modulo (10^9 + 7).

Here, two bouquets are considered different when there is a flower that is used in one of the bouquets but not in the other bouquet.

Constraints

All values in input are integers.

2 \leq n \leq 10^9

1 \leq a < b \leq \textrm{min}(n, 2 \times 10^5)

Input

Input is given from Standard Input in the following format:

n a b

Output

Print the number of bouquets that Akari can make, modulo (10^9 + 7). (If there are no such bouquets, print 0.)

Sample Input 1

4 1 3

Sample Output 1

7

In this case, Akari can choose 2 or 4 flowers to make the bouquet.

There are 6 ways to choose 2 out of the 4 flowers, and 1 way to choose 4, so there are a total of 7 different bouquets that Akari can make.

Sample Input 2

1000000000 141421 173205

Sample Output 2

34076506

Print the count modulo (10^9 + 7).

Solution in Ruby (2.3.3) (judge verdict: Wrong Answer)

#require 'pp'

def modinv(a, m)
    b = m
    u = 1
    v = 0

    while b != 0
        t = a / b
        a -= t * b;
        tmp = a
        a = b
        b = tmp

        u -= t * v
        tmp = u
        u = v
        v = tmp
    end

    u = u % m
    if u < 0
        u += m
    end

    return u
end

MOD = 10 ** 9 + 7
n, a, b = gets.split.map(&:to_i)
ans = 1
if n == 2
    puts 0
    exit 0
end

j = n
h = 2
while j > 0
    if j % 2 == 0 && h <= 10 ** 5
        j /= 2
        h = (h ** 2)
    else
        j -= 1
        ans = (ans * h) % MOD
    end
end

def calc_c(n, r)
    npr = 1
    r.times do |i|
        npr = (npr * (n - i)) % MOD
    end

    r_x = 1
    r.downto(1) do |i|
        r_x = (r_x * i) % MOD
    end

    return (npr * modinv(r_x, MOD)) % MOD
end

x = calc_c(n, a)
y = calc_c(n, b)

if ans - (x + y + 1) > 0
    puts ans - (x + y + 1) 
else
    puts ans - (x + y + 1) + MOD
end