Go: package main

import (
	"bufio"
	"os"
	"strconv"
	"fmt"
)

func solve(a, b, c int) int {
	if a == 1 && b >= c && b < 10 {
		return 1
	}
	if a == 1 {
		return 0
	}
	ret := 0
	for i := c; i < 10 && i < b; i++ {
		ret += solve(a-1, b-i, i+1)
	}
	return ret
}

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	scanner.Split(bufio.ScanWords)
	for {
		scanner.Scan()
		a, _ := strconv.Atoi(scanner.Text())
		if a == 0 {
			break
		}
		scanner.Scan()
		b, _ := strconv.Atoi(scanner.Text())
		fmt.Println(solve(a, b, 0))
	}
}

C++: #include<iostream>
using namespace std;
int syu(int *p,int n){
  int s=0;
  for(int i=0;i<n;i++) s += p[i];
  return s;
}
int main(){
  int n,s;
  while(cin>>n>>s){
    if(n==0&&s==0) break;
    int p[n],count=0;
    for(int a=0;a<=9;a++){
      p[0] = a;
      if(n==1&&syu(p,n)==s){
	count++;
	continue;
      }
      for(int b=a+1;b<=9;b++){
	p[1] = b;
	if(n==2&&syu(p,n)==s){
	  count++;
	  continue;
	}
	for(int c=b+1;c<=9;c++){
	  p[2] = c;
	  if(n==3&&syu(p,n)==s){
	    count++;
	    continue;
	    for(int d=c+1;d<=9;d++){
	      p[3] = d;
	      if(n==4&&syu(p,n)==s){
		count++;
		continue;
		for(int e=d+1;e<=9;e++){
		  p[4] = e;
		  if(n==5&&syu(p,n)==s){
		    count++;
		    continue;
		    for(int f=e+1;f<=9;f++){
		      p[5] = f;
		      if(n==6&&syu(p,n)==s){
			count++;
			continue;
			for(int g=f+1;g<=9;g++){
			  p[6] = g;
			  if(n==7&&syu(p,n)==s){
			    count++;
			    continue;
			  }
			  for(int h=g+1;h<=9;h++){
			    p[7] = h;
			    if(n==8&&syu(p,n)==s){
			      count++;
			      continue;
			    }      
			    for(int i=h+1;i<=9;i++){
			      p[8] = i;
			      if(n==2&&syu(p,n)==s){
				count++;
				continue;
			      }
			    }
			  }
			}
		      }
		    }
		  }
		}
	      }
	    }
	  }
	}
      }
    }
    cout << count << endl;
  }
  return 0;
}

C++: #include <cstdio>
using namespace std;

int dfs(int n, int s, int p){
	if(s == 0 && n == 0) return 1;
	if(n == 0 || s < 0) return 0;
	
	int c = 0;
	while(p < 10){
		c += dfs(n - 1, s - p, p + 1);
		p++;
	}
	
	return c;
}

int main(){
	int n, s;
	
	while(true){
		scanf("%d%d", &n, &s);
		if(n + s == 0) break;
		
		printf("%d\n", dfs(n, s, 0));
	}
	
	return 0;
}

C++: #include <iostream>

using namespace std;

int func(int n, int s, int v, int p)
{
	int c = 0;
	if(s < v){
		return 0;
	} else if(n == 0 && s != v){
		return 0;
	} else if(n == 0 && s == v){
		return 1;
	}

	for(int i = p; i < s; i++){
		c += func(n-1, s, v+i, i+1);
	}
	
	return c;
}

int main(int argc, char **argv)
{
	int n, s;
	
	while(cin >> n >> s){
		if(n == 0 && s == 0){
			break;
		}
		
		cout << func(n, s, 0, 0) << endl;; 
	}
	return 0;
}

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

int n, s;

int dfs(int i, int sum, int n) {
    if (i == 10) {
        if (n == 0 && sum == s)
            return 1;
        return 0;
    }
    return dfs(i + 1, sum + i, n - 1) + dfs(i + 1, sum, n);
}

int main(void) {
    while (cin >> n >> s) {
        if (n == 0 && s == 0)
            break;
        cout << dfs(0, 0, n) << endl;
    }
    return 0;
}

C++: #include <iostream>
#include <vector>
#include <algorithm>
#include <math.h>
using namespace std;

int main(){

  int n,s;
  int plus,sum,ans;
  bool retu[10];

  while(cin >> n >> s){
    if(n==0 && s==0)
      break;
    ans = 0;

    int sub = pow(2,n) - 1;
    int au = 0;
    for(int i=0;i<n;i++)
      au += pow(2,9-i);

    for(plus=sub;plus<=au;plus+=sub){
      for(int i=9,j=512,a=plus;i>=0;i--,j/=2){
	if(a/j==1){
	  a -= j;
	  retu[i] = true;
	}
	else
	  retu[i] = false;
      }
      sum = 0;
      for(int i=0;i<10;i++)
	if(retu[i] == true)
	  sum += i;
      if(sum==s)
	ans++;
    }
    cout << ans << endl;
  }

  return 0;
}

C++: #include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstdlib>
#include<vector>
#include<string>
#include<sstream>
#include<cmath>
#include<numeric>
#include<map>
#include<stack>
#include<queue>
#include<cassert>
using namespace std;
int inf = 1000000000;
int n, s;

int cnt = 0;

int func(string m, vector<bool> b){
  if( m.size() == n ){
    int tmp = 0;
    for(int i=0; i<n; i++) tmp += m[i]-'0';
    if( tmp == s ) cnt++;
    // if( tmp == s ) cerr << m << endl;
    return 0;
  }

  for(int i=0; i<10; i++){
    if( b[i] ) continue;
    b[i] = true;
    func( m + to_string(i), b);
    b[i] = false;
  }

}

int main(void) {


  while(cin >> n >> s){
    if( n == 0 && s == 0 ) break;

    vector<bool> b(10, false);
    for(int i=0; i<10; i++){
      b[i] = true;
      func(to_string(i), b);
      b[i] = false;
    }
    for(int i=n; i>0; i--) cnt /= i;
    cout << cnt << endl;
    cnt = 0;
  }

  return 0;
}


// EOF

C++: #include <iostream>
#include <cmath>
using namespace std;

int s;

void com(int c,int p[100],int a,int b){
	if(c==a){
		int m = 0;
		for(int i=1;i<=a;i++) m += p[i];
		if(b==m) s++;
	}
	else{
		for(int i=p[c]+1;i<=min(9,b-p[c]);i++){
			p[c+1] = i;
			com(c+1,p,a,b);
		}
	}
}

int main(){
	int a,b;
	while(1){
		cin >> a >> b;
		if(a+b==0) break;
		s = 0;
		int p[100];
		p[0] = -1;
		com(0,p,a,b);
		cout << s << endl;
	}
}

C++: #include<iostream>
using namespace std;

int main(void){
	int n, s;
	while(1){
		cin >> n >> s;
		if(n == 0 && s == 0) break;
		int ans = 0;

		for(int i = 0; i < 10; i++){
		for(int j = 0; j < 10; j++){
			if(j >= i) break;
		for(int k = 0; k < 10; k++){
			if(k >= j) break;
			if(i + j + k == s) ans++;
		}
		}
		}

		cout << ans << endl;
	}
}

C++: #include <iostream> 

int main(){
	int a,b,x=0;
	int fg[50];	
	while(std::cin>>a>>b&&a!=0&&b!=0){
		int d2=0,d3=0,d4=0,d5=0,d6=0,d7=0,d8=0,d9=0;
		int o=0;
		x++;
		for(int d=0;d<10;d++){
			if(a>1&&d<=10-a){
				for(d2=d+1;d2<10;d2++){
			if(a>2&&d2<=10-a+1){
				for(d3=d2+1;d3<10;d3++){
			if(a>3&&d3<=10-a+2){
				for(d4=d3+1;d4<10;d4++){
			if(a>4&&d4<=10-a+3){
				for(d5=d4+1;d5<10;d5++){
			if(a>5&&d5<=10-a+4){
			for(d6=d5+1;d6<10;d6++){
			if(a>6&&d6<=10-a+5){
				for(d7=d6+1;d7<10;d7++){
			if(a>7&&d7<=10-a+6){
				for(d8=d7+1;d8<10;d8++){
			if(a>8&&d8<=10-a+7){
				for(d9=d8+1;d9<10;d9++){
		if(a==9&&b==d+d2+d3+d4+d5+d6+d7+d8+d9){
			o++;
		}
			}
		}
		if(a==8&&b==d+d2+d3+d4+d5+d6+d7+d8+d9){
			o++;
		}
			}
		}
		if(a==7&&b==d+d2+d3+d4+d5+d6+d7+d8+d9){
			o++;
		}
			}
		}
		if(a==6&&b==d+d2+d3+d4+d5+d6+d7+d8+d9){
		
			o++;
		}
			}
		}
		if(a==5&&b==d+d2+d3+d4+d5+d6+d7+d8+d9){
			o++;
		}
			}
		}
		if(a==4&&b==d+d2+d3+d4+d5+d6+d7+d8+d9){
			o++;
		}
			}
		}if(a==3&&b==d+d2+d3+d4+d5+d6+d7+d8+d9){
			o++;
		}
			}
		}if(a==2&&b==d+d2+d3+d4+d5+d6+d7+d8+d9){
			o++;
		}
		}
		if(a==1&&b==d+d2+d3+d4+d5+d6+d7+d8+d9){
			o++;
		}
			}
		}
		fg[x]=o;
	}
	for(int j=1;j<=x;j++){
		std::cout<<fg[j]<<std::endl;
	}
	return 0;
}

C++: #include <iostream>
 
using namespace std;
 
int juju(int n, int s, int v, int t)
{
    if(n == 0 && v == s){
        return 1;
    }
    if(v > s || n < 0){
        return 0;
    }
    int c = 0;
    for(int i = t+1; i <= 9; i++){
        c += juju(n-1, s, i+v, i);
    }
     
    return c;
}
 
int main()
{
    int n, s, c;
     
    while(1){
        cin >> n >> s;
        if(n == 0 && s == 0){
            break;
        }
 
        c = 0;
        for(int i = 0; i <= 9; i++){
            c += juju(n-1, s, i, i);
        }
         
        cout << c << endl;
    }
     
    return 0;
}