function Binomial(N,M)
{
	var arrN = new Array(36);
	arrN[1]	=	"1";
	arrN[2]	=	"1:2";
	arrN[3]	=	"1:3";
	arrN[4]	=	"1:4:6";
	arrN[5]	=	"1:5:10";
	arrN[6]	=	"1:6:15:20";
	arrN[7]	=	"1:7:21:35";
	arrN[8]	=	"1:8:28:56:70";
	arrN[9]	=	"1:9:36:84:126";
	arrN[10]=	"1:10:45:120:210:252";
	arrN[11]=	"1:11:55:165:330:462";
	arrN[12]=	"1:12:66:220:495:792:924";
	arrN[13]=	"1:13:78:286:715:1287:1716";
	arrN[14]=	"1:14:91:364:1001:2002:3003:3432";
	arrN[15]=	"1:15:105:455:1365:3003:5005:6435";
	arrN[16]=	"1:16:120:560:1820:4368:8008:11440:12870";
	arrN[17]=	"1:17:136:680:2380:6188:12376:19448:24310";
	arrN[18]=	"1:18:153:816:3060:8568:18564:31824:43758:48620";
	arrN[19]=	"1:19:171:969:3876:11628:27132:50388:75582:92378";
	arrN[20]=	"1:20:190:1140:4845:15504:38760:77520:125970:167960:184756";
    arrN[21]=	"1:21:210:1330:5985:20349:54264:116280:203490:293930:352716"
	arrN[22]=	"1:22:231:1540:7315:26334:74613:170544:319770:497420:646646:705432"
	arrN[23]=	"1:23:253:1771:8855:33649:100947:245157:490314:817190:1144066:1352078"
	arrN[24]=	"1:24:276:2024:10626:42504:134596:346104:735471:1307504:1961256:2496144:2704156"
	arrN[25]=	"1:25:300:2300:12650:53130:177100:480700:1081575:2042975:3268760:4457400:5200300"
	arrN[26]=	"1:26:325:2600:14950:65780:230230:657800:1562275:3124550:5311735:7726160:9657700:10400600"
	arrN[27]=	"1:27:351:2925:17550:80730:296010:888030:2220075:4686825:8436285:13037895:17383860:20058300"
	arrN[28]=	"1:28:378:3276:20475:98280:376740:1184040:3108105:6906900:13123110:21474180:30421755:37442160:40116600"
	arrN[29]=	"1:29:406:3654:23751:118755:475020:1560780:4292145:10015005:20030010:34597290:51895935:67863915:77558760"
	arrN[30]=	"1:30:435:4060:27405:142506:593775:2035800:5852925:14307150:30045015:54627300:86493225:119759850:145422675:155117520"
	arrN[31]=	"1:31:465:4495:31465:169911:736281:2629575:7888725:20160075:44352165:84672315:141120525:206253075:265182525:300540195"
	arrN[32]=	"1:32:496:4960:35960:201376:906192:3365856:10518300:28048800:64512240:129024480:225792840:347373600:471435600:565722720:601080390"
	arrN[33]=	"1:33:528:5456:40920:237336:1107568:4272048:13884156:38567100:92561040:193536720:354817320:573166440:818809200:1037158320:1166803110"
	arrN[34]=	"1:34:561:5984:46376:278256:1344904:5379616:18156204:52451256:131128140:286097760:548354040:927983760:1391975640:1855967520:2203961430:2333606220"
	arrN[35]=	"1:35:595:6545:52360:324632:1623160:6724520:23535820:70607460:183579396:417225900:834451800:1476337800:2319959400:3247943160:4059928950:4537567650"

	var arrM = arrN[N].split(":");
	if (M > N-M)
	{
		return arrM[N-M];
	}
	else
	{
		return arrM[M];
	}		
}

function GetAllVariants(N)
{
	var arrResults = new Array(N);
	for (i=0;i<N;i++)
	{
		arrResults[i]=Binomial(N,i);
	}
	return arrResults;
}

function sortNumber(A,b)
{
return a - b
}

function GetBlockCount(strBlk)
{
	var blk = new Array(); 
	blk=strBlk.split(":");
	blk.sort(sortNumber);
	var Prev="";
	var Cnt = 0;
	for( i=0; i<blk.length;i++)
	{
		if (blk[i] != Prev)
		{
			Cnt += 1;
			Prev=blk[i];
		}
	}
	return Cnt;
}