#include #include #include #define sqr(a) ((a)*(a)) #define rsz resize #define forr(i,a,b) for(int i=(a);i<(b);i++) #define forn(i,n) forr(i,0,n) #define dforn(i,n) for(int i=n-1;i>=0;i--) #define forall(it,v) for(auto it=v.begin();it!=v.end();it++) #define pb push_back #define mp make_pair #define lb lower_bound #define ub upper_bound #define fst first #define snd second #define MOD ((ll)1000000007) using namespace std; using namespace __gnu_pbds; typedef tree,rb_tree_tag,tree_order_statistics_node_update> ordered_set; typedef long long ll; typedef pair ii; ll dp[1201][1201],dpfact[1201][1201]; vector v; ll n; ll fact(ll n,ll cant) { ll ret=1; ll n2=n; if(dpfact[n][cant]!=0) return dpfact[n][cant]; forn(i,cant) { ret=(ret*n)%MOD; n--; } dpfact[n2][cant]=ret; return ret; } ll solve(ll grupos,ll pos) { if(grupos==1 || pos>=n) return 1; if(dp[grupos][pos]!=0) return dp[grupos][pos]; bool puede=true; ll ret=0; for(ll i=1;i<=grupos && puede && pos+i-1> n; v.rsz(n); forn(i,n) cin >> v[i]; bool puede=true; for(ll i=1;i<=n && puede;i++) { if(i!=1 && v[i-1]