func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 102;   double dp[N][N][N][3];   int vis[N][N][N][3];   double call(int r, int s, int p, int id) {     if (id == 0) {       if (r == 0) return 0;       if (s + p == 0) return 1;     } else if (id == 1) {       if (s == 0) return 0;       if (r + p == 0) return 1;     } else {       if (p == 0) return 0;       if (r + s == 0) return 1;     }     if (vis[r][s][p][id] == 1) return dp[r][s][p][id];     vis[r][s][p][id] = 1;     double ret = 0;     double total = ((r + s + p - 1) * (r + s + p)) / 2;     double pr = ((r * (r - 1)) / 2) / total;     double ps = ((s * (s - 1)) / 2) / total;     double pp = ((p * (p - 1)) / 2) / total;     double prs = (r * s) / total;     double prp = (r * p) / total;     double psp = (s * p) / total;     double prob = pr + ps + pp;     if (r >= 1 and s >= 1) ret = ret + prs * call(r, s - 1, p, id);     if (r >= 1 and p >= 1) ret = ret + prp * call(r - 1, s, p, id);     if (s >= 1 and p >= 1) ret = ret + psp * call(r, s, p - 1, id);     return dp[r][s][p][id] = ret / (1 - prob);   }   int main() {     ios_base::sync_with_stdio(0);     cin.tie(nullptr);     int r, s, p;     cin >> r >> s >> p;     cout << fixed << setprecision(9) << call(r, s, p, 0) <<              << call(r, s, p, 1) <<     << call(r, s, p, 2) <<   n ;   }   