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 cnt; int N, Ans;

void choose(int k, int l, int digit) {
  if(l == N && k == Ans) { cnt++; return; }
  else if (l == N) return;
  else if (digit >= 10) return;
  
  choose(k+digit, l+1, digit+1);
  choose(k, l, digit+1);
}

int main () {
  while(cin>>N>>Ans, N||Ans) {
    cnt = 0;
    choose(0, 0, 0);
    cout << cnt << endl;
  }
  return 0;
}

C++: #include<iostream>

using namespace std;

int main(){

  int n, s, x;

  while(1){

    cin >> n >> s;

    if(n == 0 && s == 0) break;

    x = n *(n-1) / 2;

    s -= x;

    if(s >= n){
      if(n < 0)n=0;
      cout << n<< endl;
    }else{
      if(s < 0)s=0;
      cout << s << endl;
    }

  }
  return 0;

}

C++: #include <bits/stdc++.h>
#define rep(i, a, n) for(int i = a; i < n; i++)
#define repb(i, a, b) for(int i = a; i >= b; i--)
#define all(a) a.begin(), a.end()
#define o(a) cout << a << endl
#define int long long
// #define first first
// #define second se
using namespace std;
typedef pair<int, int> P;
typedef vector<int> vi;

int ans = 0;
int n, s;

void dfs(int k, int used, int sum){
    if(used == n && sum == s) ans++;
    if(used == n || k >= 10) return;
    dfs(k + 1, used + 1, sum + k);
    dfs(k + 1, used, sum);
    return;
}

signed main(){
    while(1){
        cin >> n >> s;
        if(n + s == 0) break;
        ans = 0;
        dfs(0, 0, 0);
        o(ans);
    }
}

C++: //#include <stdio.h>
//  int main(){while(1){
//   int a[101]={};
//   int b,c,d;
//   scanf("%d%d",&b,&c);
//   if(b==0 && c==0) break;
//   int i,j;
//   for(i=0;i<b;i++){
//      for(j=1;j<=c;j++){
//         scanf("%d",&d);
//         a[j]+=d;
//      }
//   }
//   int num=0;
//for(i=b;i>=0;i--){
//	for(j=1;j<=c;j++){
//		if(i==a[j]){
//			if(num==0){
//			printf("%d",j);
//			num++;
//			}
//		else{
//			printf(" %d",j);
//			num++;
//		}
//		}
//	}
//}
//printf("\n");
//  }
//return 0;
//  }
#include <stdio.h>
int x(int num, int sum, int n){
	if (num == 0 && sum == 0){ 
		return 1; 
	}     
	if (n > 9){  
		return 0;   
	}     
	return (x(num - 1, sum - n, n + 1) + x(num, sum, n + 1));
} 
int main(void) { 
	int sum, num;    
	while (1){       
		scanf("%d%d", &num, &sum); 
		if (num == 0 && sum == 0) break;   
		printf("%d\n", x(num, sum, 0));  
	}     
	return 0;
}

C++: #include<bits/stdc++.h>
#include<vector>
#include<list>
#include<stack>
#include<queue>
#include<algorithm>
#include<map>
using namespace std;

int main(){
    int mod=1000000007;
    int n,s,ans;
    for (;;) {
        scanf("%d %d",&n,&s);
        ans=0;
        if (n==0 && s==0) break;
        for (int a=0;a<10-n+1;a++) {
            if (n==1 && a==s) ans++;
            if (n>1){
                for (int b=a+1;b<10-n+2;b++) {
                    if (n==2 && a+b==s) ans++;
                    if (n>2) {
                        for (int c=b+1;c<10-n+3;c++) {
                            if (n==3 && a+b+c==s) ans++;
                            if (n>3) {
                                for (int d=c+1;d<10-n+4;d++) {
                                    if (n==4 && a+b+c+d==s) ans++;
                                    if (n>4) {
                                        for (int e=d+1;e<10-n+5;e++) {
                                            if (n==5 && a+b+c+d+e==s) ans++;
                                            if (n>5) {
                                                for (int f=e+1;f<10-n+6;f++) {
                                                    if (n==6 && a+b+c+d+e+f==s) ans++;
                                                    if (n>6) {
                                                        for (int g=f+1;g<10-n+7;g++) {
                                                            if (n==7 && a+b+c+d+e+f+g==s) ans++;
                                                            if (n>7) {
                                                                for (int h=g+1;h<10-n+8;h++) {
                                                                    if (n==8 && a+b+c+d+e+f+g+h==s) ans++;
                                                                    if (n>8) {
                                                                        for (int i=h+1;i<10-n+9;i++) {
                                                                            if (n==9 && a+b+c+d+e+f+g+h+i==s) ans++;
                                                                        }
                                                                    }
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        printf("%d\n",ans);    
    }
    return 0;
}

C++: #include<iostream>
#include<stdio.h>
using namespace std;
int count;

void Func(int n,int s,int j){
	if(n==0){
		if(s==0)++count;
		return;
	}
	for(int i=j+1;i<=9;++i){
		Func(n-1,s-i,i);
	}
}

int main(){
	int n,s;
	while(cin>>n>>s,n|s){
		count = 0;
		Func(n,s,-1);
		cout << count << endl;
	}
}

C++: #include<iostream>
using namespace std;
int jud (int x,int n,int s)
{
	if(n==0&&s==0){
		return 1;
	}else if(n<0&&s<0)return 0;
	
	if(x==10){
		if(n==0&&s==0)return 1;
		else return 0;
	}
	
	
	
	
	int ans=0;
	
	ans+=jud(x+1,n-1,s-x);
	ans+=jud(x+1,n,s);
	return ans;
}



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

C++: #include <iostream>
using namespace std;
int n,s,c;
void f(int m,int a,int t){
	if(a == n){
		if(t == s) ++c;
		return;
	}
	for(int i = m;i < 10;++i){
		f(i + 1,a + 1,t + i);
	}
}
int main(){
	while(cin >> n >> s && (n != 0 && s != 0)){
		c = 0;
		for(int i = 0;i < 10;++i)f(i,0,i);
		cout << c << endl;
	}
	return 0;
}

C++: #include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <cstring>
#include <map>
#include <queue>
#include <stack>
#include <set>
#include <functional>
#include <sstream>
#include <complex>
#include <climits>
using namespace std;

#define REP(i,a,n) for(int i=(a);i<(int)(n);i++)
#define rep(i,n) REP(i,0,n)
#define pb push_back
#define mp make_pair
#define all(x) x.begin(),x.end()
#define EPS 1e-8

int memo[11][100];
int main(){
	int n,s;
	
	for(int i=0; i<(1<<10); i++){
		int sum = 0;
		int bitc = 0;
		for(int j=0; (1<<j)<=i; j++)if( i&(1<<j) ){
			sum += j;
			bitc++;
		}
		memo[bitc][sum]++;
	}
	
	while(scanf("%d%d",&n,&s),n|s){
		printf("%d\n",memo[n][s]);
	}
	return 0;
}

C++: #include<iostream>
using namespace std;
int solve(int n,int m){
  if(m<45.0-((n-1)*0.5*n))return 0;
  
  if(n==1)return (0<=m&&m<=9?1:0);
  int res=0;
  if(m-n+1>=0)res+=solve(n-1,m-n+1);
  if(m-n>=0)res+=solve(n,m-n);
  if(m-10>=0)res-=solve(n,m-10);
  return res;
}
int main(){
  int n,m;
  while(cin>>n>>m&&n&&m){
    cout<<solve(n,m)<<endl;
  }
  return 0;
}