#include<iostream>
using namespace std;
bool ptr[10];
int kaunto[50]={0};
int count=0;
void dfs(int g,int cd){//g==now place ptr==pointer.
	if(g==0&&cd==0){
		kaunto[count]++;
		return;
	}
	else if(cd==0){
		return;
	}
	else if(g<0){
		return;
	}
	for(int i=0;i<10;i++){
		if(ptr[i]){
			continue;
		}
		ptr[i]=true;
		dfs(g-i,cd-1);
		ptr[i]=false;
	}
}
int kaijo(int x){
	int y=1;
	for(int i=1;i<=x;i++){
		y*=i;
	}
	return y;
}
int main(){
	int n[50]={0},s=0,answer=0;
	while(1){
		cin>>n[count];
		cin>>s;
		if(n[count]==0&&s==0){
			break;
		}
		for(int h=0;h<10;h++){
			ptr[h]=false;
		}
		dfs(s,n[count]);
		count++;
	}
	for(int k=0;k<count;k++){
		cout<<kaunto[k]/kaijo(n[k])<<endl;
	}
	return 0;
}
