For this Question: Newton is standing before a typical staircase with N steps. Newton is standing on the 0-th step and wants to go to the N-th step. To reach the top he can either take a single step or he can take a double step (two steps) at the same time.

However, M of the N steps are broken i. e. S<sub>1</sub>, S<sub>2</sub>, ... , S<sub>M</sub> are broken and Newton cannot visit those steps, 
 
Find out the number of different ways in which Newton can climb to the top of the staircase. Since the number can be very large, find it modulo 1,000,000,007The first line contains two integers, N and M.
The next M lines contains a single integer each, S<sub>i</sub>

<b>Constraints:</b>
1) 1 &le; N &le; 2 x 10<sup>5</sup>
2) 0 &le; M &le; N - 1
3) 1 &le; S<sub>1</sub> &lt; S<sub>2</sub>, &lt; ... &lt; S<sub>M</sub> &le; N - 1Print the number of ways<b>Sample Input 1:</b>
6 1
3

<b>Sample Output 1:</b>
4

<b>Sample Explanation 1:</b>
There are four ways to climb up the stairs, as follows:

0→1→2→4→5→6
0→1→2→4→6
0→2→4→5→6
0→2→4→6


<b>Sample Input 2:</b>
100 5
1
23
45
67
89

<b>Sample Output 2:</b>
608200469, I have written this Solution Code: #include <bits/stdc++.h>
#define int long long
using namespace std;

int32_t main()
{
    int x,n,m;
    cin>>n>>m;
    vector<int>v(n+1,0);
    for(int i=1;i<=m;i++){
        cin>>x;
        v[x]=1;
    }
    vector<int>dp(n+1,0);
    int M = 1e9+7;
    dp[0]=1;
    for(int i=0;i<n+1;i++){
        if(v[i]==0){
            if(i+2<=n)dp[i+2]+=dp[i];
            if(i+1<=n)dp[i+1]+=dp[i];
            dp[i+2]%=M;
            dp[i+1]%=M;
        }
    }
    int ans = dp[n]%M;
    cout<<ans;
}
, In this Programming Language: C++, Now tell me if this Code is compilable or not?