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

//g++ -std=gnu++14 a.cpp
#include <algorithm>
#include <bitset>
#include <complex>
#include <deque>
#include <iostream>
#include <istream>
#include <iterator>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <vector>
#include <tuple>
#include <iomanip>
#include <random>
#include <math.h>

using namespace std;

#define ll long long
#define rep(i, n) for(ll i = 0; i < (n); i++)
ll MOD = 1e9 + 7;
int INF = 1 << 30;
ll INFL = 1LL << 60;

ll extGCD(ll a, ll  b, ll &x, ll &y){
  if(b==0){
    x = 1;
    y = 0;
    return a;
  }
  ll d = extGCD(b,a%b,y,x);
  y -= (a/b)*x;
  return d;
}

ll gen(int c){
  ll res,x,y,hosei;
  hosei = extGCD(MOD,c,x,y);
  res = y;
   while(res<0){
    res += MOD/hosei;
   }
  return res;
}

int main() {
  int n,a,b;
  cin >> n >> a >> b;
  ll cnt  = n;
  ll nijou = 1;
  while(cnt>0){
    while(cnt >= 100){
      nijou = nijou*1024*1024;
      if(nijou>MOD*3)nijou%=MOD;
      cnt -= 100;
    }
    nijou *= 2;
    if(nijou>MOD*3)nijou%=MOD;
    cnt--;
  }
  ll resa,resb;
  resa = 1;
  resb = 1;
  ll a1,b2,nn;
  nn = n;
  a1 = 1;
  b2 = 1;
  while(nn>=n-a+1 || a1<=a){
    resa = (resa*nn)%MOD;
    resa = (resa*gen(a1))%MOD;
    nn--;
    a1++;
  }
  nn = n;
  while(nn>=n-b+1 || b2<=b){
    resb = (resb*nn)%MOD;
    resb = (resb*gen(b2))%MOD;
    nn--;
    b2++;
  }
  ll ans = (nijou-resa-resb-1)%MOD;
  //cout <<  resa << " " << resb << endl;
  cout << ans << endl;
}