Pagini recente » Cod sursa (job #3325147) | Cod sursa (job #3264619) | Cod sursa (job #3314381) | Cod sursa (job #2188627) | Cod sursa (job #3317386)
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
#include <queue>
#include <fstream>
#define m 1000000007
using namespace std;
ifstream f("functii.in");
ofstream g("functii.out");
int n,a[100001],k;
long long putere(long long x,long long n)
{
if(n==0)
return 1;
if(n==1)
return x%m;
long long a=putere(x,n/2);
a=(a*a)%m;
if(n%2==1)
a=(a*x)%m;
return a;
}
int comb(long long n,long long k)
{
long long s=1,t=1;
for(int i=1;i<=n;i++)
{
s=(s*i)%m;
if(i<=k)
t=(t*i)%m;
if(i<=n-k)
t=(t*i)%m;
}
t=putere(t,m-2);
return (s*t)%m;
}
int main()
{
f>>n>>k;
for(int i=1;i<=n;i++)
f>>a[i];
int prod=1;
a[n+1]=k;
int p=1,u;
for(int i=1;i<=n+1;i++)
{
int l=0;
if(a[i]==-1)
while(a[i]==-1)
{
l++;
i++;
}
u=a[i];
if(u-p<0)
{
g<<0;
return 0;
}
if(l)
prod=(prod*(comb(l+u-p,u-p)))%m;
p=u;
}
g<<prod;
return 0;
}