import java.math.BigInteger; import java.util.ArrayList; import java.util.Random; import java.util.Scanner; public class prog { static ArrayList facts = new ArrayList(); static ArrayList combinations = new ArrayList(); public static void main(final String[] args) { Scanner scanner = new Scanner(System.in); facts.add(BigInteger.valueOf(1)); facts.add(BigInteger.valueOf(1)); facts.add(BigInteger.valueOf(2)); facts.add(BigInteger.valueOf(6)); combinations.add(BigInteger.valueOf(0)); combinations.add(BigInteger.valueOf(0)); combinations.add(BigInteger.valueOf(0)); combinations.add(BigInteger.valueOf(0)); for (int i = 4; i <= 60; ++i) { BigInteger aux = compute_combinations(i); combinations.add(aux); } int n = scanner.nextInt(); int r = scanner.nextInt(); int initN = n; BigInteger ans = BigInteger.ONE; while (n >= 4) { ans = ans.multiply(combinations.get(n)); n -= 4; } System.out.print("("); System.out.print(ans.toString()); System.out.print("/"); System.out.print(facts.get(initN / 4)); System.out.print(")^"); System.out.print(r); // System.out.println("(" + ans.toString() + "/" + facts.get(initN / 4) << ")^" + // cout << '(' << ans << '/' << facts[initN / 4] << ")^" << R; } static BigInteger compute_combinations(int N) { BigInteger resultup, kfact, nmkfact; resultup = BigInteger.ONE; kfact = BigInteger.ONE; nmkfact = BigInteger.ONE; for (int i = 1; i <= N; ++i) { resultup = resultup.multiply(BigInteger.valueOf(i)); } // System.out.println("\"" + resultup.toString() + "\","); facts.add(resultup); for (int i = 1; i <= 4; ++i) { kfact = kfact.multiply(BigInteger.valueOf(i)); } for (int i = 1; i <= N - 4; ++i) { nmkfact = nmkfact.multiply(BigInteger.valueOf(i)); } return resultup.divide(kfact.multiply(nmkfact)); } }