#include #include #include #include #include #include #include #include #include #include using namespace std; long long gcd(long long a, long long b){ if(b==0) return a; return gcd(b, a%b); } void solve(int n, int m){ vector > > > dp(min(n,m)+5, vector > >(n+1, vector >(m+1, vector(2, 0)))); if(n>0){ dp[0][n-1][m][1] = 1; } if(m>0){ dp[0][n][m-1][0] = 1; } for(int i=1; i 0) dp[k+1][n_-1][m_][1] += dp[k][n_][m_][0]; if(n_ > 0) dp[k][n_-1][m_][1] += dp[k][n_][m_][1]; if(m_ > 0) dp[k][n_][m_-1][0] += dp[k][n_][m_][0]; if(m_ > 0) dp[k][n_][m_-1][0] += dp[k][n_][m_][1]; } } } long long ans = 0; for(int i=1; i<=min(n,m); i++){ ans += dp[i][0][0][0] * i; ans += dp[i][0][0][1] * i; } vector > nCk(25, vector(25, 0)); nCk[0][0] = 1; for(int i=1; i<=24; i++){ for(int j=0; j<=i; j++){ if(j==0 || j==i){ nCk[i][j] = 1; }else{ nCk[i][j] = nCk[i-1][j-1] + nCk[i-1][j]; } } } long long d = gcd(ans, nCk[n+m][min(n,m)]); ans /= d; nCk[n+m][min(n,m)] /= d; cout << ans << "/" << nCk[n+m][min(n,m)] << endl; } int main(){ int n,m; while(cin >> n >> m){ solve(n,m); } return 0; }