午餐的品格
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

自从学校新建了南校区食堂,重修装修了北校区的几个食堂以后,同学们发现学校食堂的美食越来越多了。



有一天,老周来到南校区餐厅吃午饭,已知食堂中午一共烹饪了 n 道菜供学校师生选购,且每道菜都不一样,但是由于有强迫症的老周不喜欢 x,y,z 这三个数字,因此,他不会购买这三个数字的菜肴数量,问:老周最多可以选择多少种不同的午餐组合。由于答案可能很大,因此你需要对答案进行 (10^9+7) 取模运算。(注意:老周下午要给学生上课,不能不吃饭!)

输入描述:

输入第 1 行包含四个正整数 n,x,y,z

输出描述:

输出一行,这一行包含一个整数,表示答案。由于答案可能很大,因此你需要对答案进行 (10^9+7) 取模运算。
示例1

输入

复制
4 1 2 3

输出

复制
1

说明

样例 1 中,由于老周不喜欢 1,2,3 这三个数字,因此,他只能全部买掉这 4 种菜肴,答案 =1
示例2

输入

复制
5 2 3 1

输出

复制
6

备注:

对于所有测试数据,4\leq n\leq 10^9,1\leq x,y,z\leq min(n,2\times 10^5)
题目测试数据保证:x,y,z 两两不同。