#include <iostream> 
#include <ctime> 
using  namespace  std; 
 
int  main( )  { 
	unsigned  int  start_time1,start_time2,start_time3,search_time1,search_time2,search_time3; 
	int  i,y,u,m,n,h,j,x; 
	long  long  c3= 0 ; 
	cin >> m; 
	cin >> n; 
	double  k= m,c2= 1 ,c1; 
	long  long  D[ m+ 3 ] [ n+ 1 ] ; 
	double  b= m- n, q= n, w= m, z= b; 
	if ( m> n &&  n>= 1 ) 
	{ 
		start_time1 =  clock ( ) ; 
		for ( i= 1 ; i< n; i++ )  { q= q* i; } 
		for ( y= 1 ; y< m; y++ )  { w= w* y; } 
		for ( u= 1 ; u< b; u++ )  { z= z* u; } 
		c1= w/ ( q* z) ; 
		cout << "По первой формуле равно:" << c1<< " " << endl; 
		search_time1 =  clock ( )  -  start_time1; 
 
		start_time2 =  clock ( ) ; 
		for ( i= n; i>= 1 ; i-- ) 
		{ 
			c2* = ( k- i+ 1 ) / i; 
		} 
		cout << "По второй формуле равно:" << c2<< " " << endl; 
		search_time2 =  clock ( )  -  start_time2; 
 
		start_time3 =   clock ( ) ; 
		for ( y= 1 ; y<= m; y++ )  // Для каждой строки. 
		{ 
			D[ y] [ 1 ] = y; 
			D[ y] [ y] = 1 ; 
			for ( x= 2 ; x<= n &&  x< y; x++ ) 
			{ 
				D[ y] [ x] = D[ y- 1 ] [ x- 1 ] + D[ y- 1 ] [ x] ; 
			} 
		} 
		c3= D[ m] [ n] ; 
		cout << "По третьей формyле равно:" << c3<< " " << endl; 
		search_time3 =  clock ( )  -  start_time3; 
	} 
	else  if ( m< n)  { 
		cout << "invalid" ; 
	} 
 
	cout << "Первая формула сработала за:(в милисек)" << ( ( double ) search_time1/ CLOCKS_PER_SEC ) * 1000 << endl; 
	cout << "Вторая формула сработала за:(в милисек)" << ( double ) search_time2/ CLOCKS_PER_SEC * 1000 << endl; 
	cout << "Третья формула сработала за:(в милисек)" << ( double ) search_time3/ CLOCKS_PER_SEC * 1000 << endl; 
	return  0 ; 
} 
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3RpbWU+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWFpbigpIHsKCXVuc2lnbmVkIGludCBzdGFydF90aW1lMSxzdGFydF90aW1lMixzdGFydF90aW1lMyxzZWFyY2hfdGltZTEsc2VhcmNoX3RpbWUyLHNlYXJjaF90aW1lMzsKCWludCBpLHksdSxtLG4saCxqLHg7Cglsb25nIGxvbmcgYzM9MDsKCWNpbj4+bTsKCWNpbj4+bjsKCWRvdWJsZSBrPW0sYzI9MSxjMTsKCWxvbmcgbG9uZyBEW20rM11bbisxXTsKCWRvdWJsZSBiPW0tbiwgcT1uLCB3PW0sIHo9YjsKCWlmKG0+biAmJiBuPj0xKQoJewoJCXN0YXJ0X3RpbWUxID0gY2xvY2soKTsKCQlmb3IoaT0xO2k8bjtpKyspIHtxPXEqaTt9CgkJZm9yKHk9MTt5PG07eSsrKSB7dz13Knk7fQoJCWZvcih1PTE7dTxiO3UrKykge3o9eip1O30KCQljMT13LyhxKnopOwoJCWNvdXQ8PCLQn9C+INC/0LXRgNCy0L7QuSDRhNC+0YDQvNGD0LvQtSDRgNCw0LLQvdC+OiI8PGMxPDwiICI8PGVuZGw7CgkJc2VhcmNoX3RpbWUxID0gY2xvY2soKSAtIHN0YXJ0X3RpbWUxOwoJCQoJCXN0YXJ0X3RpbWUyID0gY2xvY2soKTsKCQlmb3IoaT1uO2k+PTE7aS0tKQoJCXsKCQkJYzIqPShrLWkrMSkvaTsKCQl9CgkJY291dDw8ItCf0L4g0LLRgtC+0YDQvtC5INGE0L7RgNC80YPQu9C1INGA0LDQstC90L46Ijw8YzI8PCIgIjw8ZW5kbDsKCQlzZWFyY2hfdGltZTIgPSBjbG9jaygpIC0gc3RhcnRfdGltZTI7CgkJCgkJc3RhcnRfdGltZTMgPSAgY2xvY2soKTsKCQlmb3IoeT0xO3k8PW07eSsrKSAvLyDQlNC70Y8g0LrQsNC20LTQvtC5INGB0YLRgNC+0LrQuC4KCQl7CgkJCURbeV1bMV09eTsKCQkJRFt5XVt5XT0xOwoJCQlmb3IoeD0yO3g8PW4gJiYgeDx5O3grKykKCQkJewoJCQkJRFt5XVt4XT1EW3ktMV1beC0xXStEW3ktMV1beF07CgkJCX0KCQl9CgkJYzM9RFttXVtuXTsKCQljb3V0PDwi0J/QviDRgtGA0LXRgtGM0LXQuSDRhNC+0YDQvHnQu9C1INGA0LDQstC90L46Ijw8YzM8PCIgIjw8ZW5kbDsKCQlzZWFyY2hfdGltZTMgPSBjbG9jaygpIC0gc3RhcnRfdGltZTM7Cgl9CgllbHNlIGlmKG08bikgewoJCWNvdXQ8PCJpbnZhbGlkIjsKCX0KCQoJY291dDw8ItCf0LXRgNCy0LDRjyDRhNC+0YDQvNGD0LvQsCDRgdGA0LDQsdC+0YLQsNC70LAg0LfQsDoo0LIg0LzQuNC70LjRgdC10LopIjw8KChkb3VibGUpc2VhcmNoX3RpbWUxL0NMT0NLU19QRVJfU0VDKSoxMDAwPDxlbmRsOwoJY291dDw8ItCS0YLQvtGA0LDRjyDRhNC+0YDQvNGD0LvQsCDRgdGA0LDQsdC+0YLQsNC70LAg0LfQsDoo0LIg0LzQuNC70LjRgdC10LopIjw8KGRvdWJsZSlzZWFyY2hfdGltZTIvQ0xPQ0tTX1BFUl9TRUMqMTAwMDw8ZW5kbDsKCWNvdXQ8PCLQotGA0LXRgtGM0Y8g0YTQvtGA0LzRg9C70LAg0YHRgNCw0LHQvtGC0LDQu9CwINC30LA6KNCyINC80LjQu9C40YHQtdC6KSI8PChkb3VibGUpc2VhcmNoX3RpbWUzL0NMT0NLU19QRVJfU0VDKjEwMDA8PGVuZGw7CglyZXR1cm4gMDsKfQ==