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 Fortran (gfortran v4.8.4) (judge verdict: Runtime Error)

program main
    implicit none
    integer(8):: n, a, b, ans=0
    integer(8):: i,j,k
    integer(8),parameter:: md=1000000007
    integer(8),allocatable:: f(:), inv_f(:)

    read*, n, a, b

    allocate(f(0:max(n,200000)), inv_f(0:max(n,200000)))
    print*, 0
    ! f(:)=0; inv_f(:)=0
    f(0) = 1
    inv_f(0) = 1
    print*, 1
    do i=1,n
        f(i) = mod(f(i-1)*i,md)
        if (i==a .or. i==b .or. i==n-a .or. i==n-b) then
            inv_f(i) = inverse(f(i), md)
        end if
    end do
    print*, 2
    ans = 1
    block;integer(8):: p,ta
        p=n
        ta=2
        do while(p>0)
            if (mod(p,2) == 1) ans=mod(ans*ta,md)
            p=p/2
            ta=mod(ta*ta,md)
        end do
        end block

    if (ans-1 -comb(n,a)-comb(n,b) > 0) then
        print*, ans-1 -comb(n,a)-comb(n,b)
    else
        print*, mod(ans-1 -comb(n,a)-comb(n,b) + md, md)
    end if

contains
function comb(a,b) result(ret)
    integer(8):: a, b, ret
    ret = mod(mod(f(a)*inv_f(b),md)*inv_f(a-b),md)
end function



function inverse(x, md) result(inv)
    integer(8),value:: x
    integer(8):: md, inv
    integer(8):: p
    inv=1
    p = md-2

    do while(p > 0)
        if (mod(p,2) == 1) inv = mod(inv*x, md)
        p = rshift(p,1)
        x=mod(x*x,md)
    end do
    
end function


end program