public class ExactTree {

    int calc(int n, int n1, int s1, int n2, int s2)
    {
        return s1 + s2 + n1 * (n - n1);
    }

    public int getTree(int n, int m, int r)
    {
        int[][] dp = new int[n+1][m];
        for(int i = 1; i <= n; i++)
            for(int j = 0; j < m; j++)
                dp[i][j] = -1;
        dp[1][0] = 0;
        for(int s = 2; s <= n; s ++)
            for(int a = 1; a < s; a ++)
                for(int m1 = 0; m1 < m; m1 ++)
                    for(int m2 = 0; m2 < m; m2 ++)
                    {
                        int b = s - a;
                        if(dp[a][m1] == -1) continue;
                        if(dp[b][m2] == -1) continue;
                        int v = calc(n, a, dp[a][m1], b, dp[b][m2]);
                        if(dp[s][v%m] == -1 || dp[s][v%m] > v)
                            dp[s][v%m] = v;
                    }
        return dp[n][r];
    }
}
