import java.util.*; public class Main{ public static void main(String[] args){ Scanner scanner = new Scanner(System.in); Main a = new Main(); while(scanner.hasNextLine()){ String[] line = scanner.nextLine().split(" "); int n = Integer.parseInt(line[0]); int m = Integer.parseInt(line[1]); int toRight = a.getNumberOfPaths(n, m, 0, 0, true); int toDown = a.getNumberOfPaths(n, m, 0, 0, false); System.out.println(toRight + toDown); } } public int getNumberOfPaths(int n, int m, int cn, int cm, boolean goRight){ // already at the destination if (n == cn && m == cm){ return 1; } // can only move down if (n == cn){ if (goRight){ return 0; } return this.getNumberOfPaths(n, m, cn, cm+1, false); } // can only move right if (m == cm){ if (!goRight){ return 0; } return this.getNumberOfPaths(n, m, cn+1, cm, true); } // may move to both directions if (goRight){ int toRight = this.getNumberOfPaths(n, m, cn+1, cm, true); int toDown = this.getNumberOfPaths(n, m, cn+1, cm, false); return toRight + toDown; } int toRight = this.getNumberOfPaths(n, m, cn, cm+1, true); int toDown = this.getNumberOfPaths(n, m, cn, cm+1, false); return toRight + toDown; } }