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 (Clang 3.8.0) (judge verdict: Wrong Answer)

// at_abc156d.cpp : This file contains the 'main' function. Program execution begins and ends there.
//

#include <iostream>
using namespace std;
typedef long long ll;
const ll MOD = 1e9 + 7;
ll pow2(ll base, ll cur) {
    if (cur == 1)return base;
    ll temp = pow2(base,cur / 2);
    if (cur & 1) {   
        temp = (temp * temp * base+MOD) % MOD;
        return temp;
    }
    else {
        temp = (temp * temp + MOD) % MOD;
        return temp;
    }
}
ll combo(int n, int k) {
    ll temp = 1;
    int idx = 0;
    while (idx<k) {
        temp *= (n - idx);temp = (temp + MOD) % MOD;
        idx++;
    }
 //   cout << temp << " b\n";
    for (int i = 1;i <= k;i++) {
        //cout << pow2(i, 2) << "\n";
        //cout << (ll)pow2(i, MOD - 2) << " aa\n";
        temp *= pow2(i, MOD-2);
        temp = (temp+MOD)%MOD;
    }
    /*idx = 1;
    while (idx <= k) {
        temp /= idx;
        idx++;
    }
    return temp;*/
    return temp;
}
int main()
{
    ll num, a, b;cin >> num >> a >> b;
    //cout << pow2(2, MOD - 2);
    //cout << combo(num, a) << " "<<combo(num,b)<<" combos 
//cout << combo(num, b) << "\n";
    ll ans = (ll)pow2(2, num) - (ll)combo(num, a) - (ll)combo(num, b) - 1;
    ans = (ans + MOD) % MOD;
    cout << ans<<"\n";
}