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 Common Lisp (SBCL 2.0.3) (judge verdict: Accepted)

(let ((p 1000000007))
  (defun mod+ (a b)
    (mod (+ a b) p))
  (defun mod* (a b)
    (mod (* a b) p))
  (defun mod_expt (a z)
    (loop :with ans := 1
          :with pow := a
          :while (> z 0)
          :do (multiple-value-bind (x y) (floor z 2)
                (setf z x)
                (if (= y 1) (setf ans (mod* ans pow)))
                (setf pow (mod* pow pow)))
          :finally (return ans)))
  (defun mod_inv (a)
    (mod_expt a (- p 2))))


(let ((n (read))
      (a (read))
      (b (read))
      (ac 1)
      (bc 1)
      (ans 0))
  (loop :with x := 1
        :for i :from 1 :to (max a b)
        :do (setf x (mod* x (mod* (mod_inv i) (- n i -1))))
        :if (= a i)
        :do (setf ac x)
        :if (= b i)
        :do (setf bc x))
  (setf ans (mod+ ans (mod_expt 2 n)))
  (setf ans (mod+ ans (- 1)))
  (setf ans (mod+ ans (- ac)))
  (setf ans (mod+ ans (- bc)))
  (format t "~A~%" ans))