#define _GLIBCXX_DEBUG
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
#define ALL(v) v.begin(), v.end()
typedef long long ll;

template<class T>bool chmax(T &a, const T &b) { if (a<b) { a=b; return 1; } return 0; }
template<class T>bool chmin(T &a, const T &b) { if (b<a) { a=b; return 1; } return 0; }

#include <bits/stdc++.h>
using namespace std;

int n,s,cnt;

void dfs(vector<int> A){ 
  
  if(A.size()==n+1){
    int c=0;
    for(int i=1;i<n+1;i++) c+=A[i];
    if(c==s) cnt++;
  }
    
  for(int i=A.back()+1;i<=9;i++){
    A.push_back(i);
    dfs(A);
    A.pop_back();
  }
}


int main(){
  
  while(cin>>n>>s){
    
    if(n==0)break;
    
    cnt=0;
    vector<int> vec(1,-1);
    
    dfs(vec);
    cout<<cnt<<endl;
  }
      
  return 0;
}
