Pagini recente » Cod sursa (job #2875354) | Cod sursa (job #375591) | Cod sursa (job #3258598) | Cod sursa (job #1350291) | Cod sursa (job #3245466)
/*#include <fstream>
#include <vector>
using namespace std;
ifstream cin("grigo.in");
ofstream cout("grigo.out");
const int Nmax = 100000;
const int MOD = 1000003;
long long fastpow(long long a, int b)
{
long long ans = 1;
while(b)
{
if(b % 2)
ans = (ans * a) % MOD;
a = (a * a) % MOD;
b /= 2;
}
return ans;
}
vector <long long> factorial(Nmax + 1), invfact(Nmax + 1);
int n, m, poz[Nmax];
long long comb(int n, int k)
{
if(k < 0 || k > n)
return 0LL;
return ((factorial[n] * invfact[k]) % MOD * invfact[n-k]) % MOD;
}
int main()
{
cin >> n >> m;
for(int i=1; i<=m; i++)
cin >> poz[i];
factorial[0] = 1;
for(int i=1; i<=Nmax; i++)
factorial[i] = (factorial[i-1] * i) % MOD;
invfact[Nmax] = fastpow(factorial[Nmax], MOD - 2);
for (int i = Nmax - 1; i >= 0; i--)
invfact[i] = (1LL * invfact[i + 1] * (i + 1)) % MOD;
cout << (comb(n-1, m-1) * factorial[n - m]) % MOD;
return 0;
}*/
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("grigo.in");
ofstream cout("grigo.out");
const int Nmax = 100000;
const int MOD = 1000003;
int n, m, x[Nmax], cnt, poz[Nmax];
bool valid(int k)
{
for(int i=1; i<k; i++)
if(x[i] == x[k])
return 0;
for (int i = 1; i < m; i++)
if (poz[i] < k && x[poz[i]] >= x[poz[i + 1]])
return false;
return 1;
}
void bkt(int k)
{
for(int i=1; i<=n; i++)
{
x[k] = i;
if(valid(k))
{
if(k == n && x[m] == n)
cnt++;
else
bkt(k+1);
}
}
}
int main()
{
cin >> n >> m;
for(int i=1; i<=m; i++)
cin >> poz[i];
bkt(1);
cout << cnt;
}