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 Kotlin (1.0.0) (judge verdict: Accepted)

import java.io.BufferedReader
import java.io.InputStream
import java.io.InputStreamReader
import java.util.*

val mod = (1e9 + 7).toInt()
val fact = Array((2e5 + 1).toInt()) { 1L }
val fact2 = Array((2e5 + 1).toInt()) { 1L }
fun main(args: Array<String>) {
    val sc = FastScanner(System.`in`)

    val n = sc.nextInt()
    val a = sc.nextInt()
    val b = sc.nextInt()

    for (i in 2..2e5.toInt()) fact[i] = (fact[i - 1] * i) % mod
    fact2[1] = n.toLong()
    for (i in 2..2e5.toInt()) fact2[i] = (fact2[i - 1] * (n - i + 1)) % mod

    var res = pow(2, n)
    res = minus(res, 1)
    res = minus(res, c(n, a))
    res = minus(res, c(n, b))
    println(res)
}

fun minus(a:Int, b:Int):Int{
    return (a - b + mod) % mod
}
fun c(n: Int, k: Int): Int {
    var res = (fact2[k] * inv(fact[k])) % mod
    return res.toInt()
}
fun inv(x:Long):Int {
    return pow(x, mod - 2)
}

fun pow(a: Long, x: Int): Int {
    var a = a
    var x = x
    var res = 1L
    while (x > 0) {
        if (x % 2 == 1) res = (res * a) % mod
        x /= 2
        a = (a * a) % mod
    }

    return res.toInt()
}

class FastScanner(s: InputStream) {
    private var st = StringTokenizer("")
    private val br = BufferedReader(InputStreamReader(s))

    fun next(): String {
        while (!st.hasMoreTokens()) st = StringTokenizer(br.readLine())

        return st.nextToken()
    }

    fun nextInt() = next().toInt()
    fun nextLong() = next().toLong()
    fun nextLine() = br.readLine()
    fun nextDouble() = next().toDouble()
    fun ready() = br.ready()
}