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 C (GCC 5.4.1) (judge verdict: Accepted)

#include<stdio.h>
const long long int prime = 1000000007;
const long long int max_v = 9223372036854775807;
long long int modPow(long long int a, long long int n, long long int p)
{
	if(n==1) return a%p;
	if(n%2 == 1) return ((a%p) * (modPow(a, n-1, p)%p))%p;
	long long int t = modPow(a, n/2, p)%p;
	return (((t%p)*(t%p))%p);
}
long long int factr(long long int a)
{
	if (a ==0||a==1) return (1);
	long long int index =0;
	long long int r_v=1;
	while (index < a)
	{
		r_v = (r_v%prime*(a-index))%prime;
		index++;
	}
	return (r_v%prime);
}
long long int fac_stop(long long int a, long long int x)
{
	if (x == 0) return (1);
	if (a == 1) return (1);
	long long int index = 0;
	long long int r_v=1;
	while (index < x)
	{
		r_v = (r_v%prime*(a-index)%prime);
		index++;
	}
	return (r_v%prime);
}


int	main(void)
{
	long long int n, a, b;
	scanf("%lld %lld %lld", &n, &a, &b);
	long long int sum;
	sum = (modPow(2, n, prime) -1)%prime;
	long long int count_b, count_a;
	count_a = (modPow(factr(a),prime -2,prime) * fac_stop(n,a)%prime)%prime;
	count_b = (modPow(factr(b),prime -2,prime) * fac_stop(n,b)%prime)%prime;
	long long int r = (sum%prime- count_a%prime -count_b%prime)%prime;
	if(r < 0)
		r = prime +r;
	printf("%lld\n",r);
	return (0);
}