#include #include #include #include #include using namespace std; const int N = 105; int n,m; int xu[N]; struct Num { int val[N]; }dp[N][N]; int getint() { int res=0; char ch=getchar(); while((ch<'0' || ch>'9') && ch!='-') ch=getchar(); bool fan=0; if(ch=='-') { fan=1; ch=getchar(); } while('0'<=ch && ch<='9') { res=res*10+ch-'0'; ch=getchar(); } if(fan) res=-res; return res; } void clear(Num &x) { int i; for(i=1;i<=x.val[0];i++) x.val[i]=0; x.val[0]=0; } void jia(Num &x,Num &y) { int i; for(i=y.val[0];i>=1;i--) x.val[i]+=y.val[i]; x.val[0]=max(x.val[0],y.val[0]); for(i=1;i<=x.val[0];i++) { x.val[i+1]+=x.val[i]/10; x.val[i]%=10; } while(x.val[x.val[0]+1]) { x.val[0]++; x.val[x.val[0]+1]+=x.val[x.val[0]]/10; x.val[x.val[0]]%=10; } } void Print(Num &x) { int i; for(i=x.val[0];i>=1;i--) printf("%d",x.val[i]); if(!x.val[0]) printf("0"); printf("\n"); } void f() { int i,j,k,l; m=getint(); for(i=1;i<=n;i++) xu[i]=getint(); n++; m++; xu[0]=-1; xu[n]=1987654321; dp[0][0].val[0]=1; dp[0][0].val[1]=1; for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { clear(dp[i][j]); for(k=i-1;k>=0;k--) { if(xu[i]>xu[k]) jia(dp[i][j],dp[k][j-1]); } } } Print(dp[n][m]); } int main() { while(scanf("%d",&n)!=EOF) f(); return 0; }