class Program {
static int TestRec(int[] A,int L,int idx) {
if(idx==L) return 1;
int res=0;
for(int a=0;a<10;a++) {
bool q=false;
for(int j=0;j<idx;j++) if(A[j]==a) {
q=true; break;
}
if(q) continue;
A[idx]=a;
res+=TestRec(A,L,idx+1);
}
return res;
}
static int TestLin(int[] A,int L) {
int res=0;
int ptr=0;
for(;;) {
if(ptr==L) {
res++;
ptr--;
} else A[ptr]=-1;
for(;;) {
if(ptr<0) return res;
A[ptr]++;
if(A[ptr]==10) ptr--;
else {
bool q=false;
for(int j=0;j<ptr;j++) if(A[j]==A[ptr]) {
q=true; break;
}
if(!q) {
ptr++;
break;
}
}
}
}
}
static unsafe void Main(string[] args) {
int[] A=new int[10];
int res1=0,res2=0;
DateTime t0=DateTime.Now;
for(int u=0;u<10;u++) res1+=TestRec(A,10,0);
DateTime t1=DateTime.Now;
for(int u=0;u<10;u++) res2+=TestLin(A,10);
DateTime t2=DateTime.Now;
Console.WriteLine("TRec={0}, res={1}",t1-t0,res1);
Console.WriteLine("TLin={0}, res={1}",t2-t1,res2);
}
}
static int Val3(){
float val = 0.94f;
return (int)((double)val*100);
}