#include <bits/stdc++.h>
#define ff first
#define ss second
#define pb push_back
#define mp make_pair
using namespace std;
const int maxn = 1e6 + 3;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, m;
cin >> n >> m;
vector<int> a(n, -1);
vector<int> b(m);
for(int i = 0; i < m; i++){
cin >> b[i];
}
bool is = 0;
set<int> st;
for(int i = 0; i < m - 1; i++){
if(abs(b[i] - b[i + 1]) > 1){
is = 1;
}
else{
if(b[i] - b[i + 1] == 1){
a[i] = 1;
a[i + m] = 0;
st.insert((i + 1) % m);
}
else if(b[i + 1] - b[i] == 1){
a[i] = 0;
a[i + m] = 1;
st.insert((i + 1) % m);
}
}
}
int ans = 0;
for(int i = 0; i < m; i++){
if(a[i] > 0){
ans++;
}
}
int x = b[0] - ans;
int y = m - st.size();
int s = 1;
int s1 = 1;
int s2 = 1;
for(int i = 1; i <= y; i++){
s = (s * i) % maxn;
}
for(int i = 1; i <= x; i++){
s1 = (s1 * i) % maxn;
}
for(int i = 1; i <= y - x; i++){
s2 = (s2 * i) % maxn;
}
cout << s / ((s1 * s2)%maxn);
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |