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

#include <bits/stdc++.h>
using namespace std;



long long modpow(long long x,long long y,long long z){
  long long ans=1;
  while(y>0){
    if(y&1){
      ans*=x%z;
    }
    x*=x%z;
    x%=z;
    ans%=z;
    y>>=1;
  }
  return ans;
}

long long modC(long long x,long long y,long long z){
  long long X=1,Y=1,XY=1;
  for(long long i=x;i>=(x-y+1);i--){
    X*=i;
    X%=z;
  }
  for(long long i=1;i<=y;i++){
    Y*=i;
    Y%=z;
  }
  /*for(long long i=1;i<=(x-y);i++){
    XY*=i;
    XY%=z;
  }*/
  //cout<<Y;
  Y=modpow(Y,z-2,z);
  //XY=modpow(XY,z-2,z);
 // cout<<X<<Y<<XY;
  X*=Y;
  X%=z;
  //X*=XY;
 // X%=z;
  return X;
}





int main(){
  long long N,a,b,ans=1;
  cin>>N>>a>>b;
  ans=modpow(2,N,1000000007);
  //cout<<ans<<" ";
  ans=ans-modC(N,a,1000000007)-modC(N,b,1000000007)-1;
  while(ans<0){
    ans+=1000000007;
  }
  
  cout<<ans;
  //cout<<modpow(6,1000000005,100000007);
 // a=1000000007;
 // a*=a;
  //cout<<a;
  
}