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: Wrong Answer)

#include<stdio.h>
const long long int prime = 1000000007;
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 * modPow(a, n-1, p))%p;
	long long int t = modPow(a, n/2, p);
	return ((t*t)%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*(a-index)%prime)%prime;
		index++;
	}
	return (r_v);
}
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*(a-index)%prime)%prime;
		index++;
	}
	return (r_v);
}


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;
	printf("sum:%lld\n",sum);
	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;
	printf("counta:%lld, countb:%lld\n",count_a%prime, count_b%prime);
	printf("modpowa:%lld\n",modPow(factr(a),prime -2,prime)%prime);
	printf("modpowb:%lld\n",modPow(factr(b),prime -2,prime)%prime);
	
	printf("facs_a:%lld\n",fac_stop(n,a));
	printf("facs_b:%lld\n",fac_stop(n,b));

	printf("check:factrb:%lld\n",factr(b));

	printf("%lld\n",(sum%prime- count_a%prime -count_b%prime)%prime);
	return (0);
}