import java.math.BigInteger;

public class Coefficients2 {
	static final int MAX_K = 1000;
	static BigFraction[] a = new BigFraction[MAX_K + 2];

	public static void main(String[] args) {	
		long startTime;
		long endTime;
		long runningTime;
		
		startTime = System.currentTimeMillis();
		//System.out.println(a[1]);
		for (int k = 0; k <= MAX_K; k++) {
			for (int l = k+1; l >= 1; l--) {
				a[l] = a(l,k).reduce();
				//System.out.print(a[l] + " ");
			}
			//System.out.println();
		}
		endTime = System.currentTimeMillis();
		runningTime = endTime - startTime;
		
		System.out.println("B_" + MAX_K + " = " + a[1]);
		System.out.println("The computation took approximately " + runningTime + " ms.");
		
	}

	public static BigFraction a(int l, int k) {
		if (l >= 2 && l <= k+1) 
			return new BigFraction(BigInteger.valueOf(k), BigInteger.valueOf(l)).multiply(a[l-1]);
		else if (l == 1) {
			BigFraction sum = new BigFraction(BigInteger.ONE, BigInteger.ONE);
			for (int i = 2; i <= k+1; i++) {
				sum = sum.subtract(a[i]);
			}
			return sum;
		}
		else return new BigFraction(BigInteger.ZERO, BigInteger.ONE);
	}
}