static BigInteger solve(int d, int l) {
		if (l == n)
			return BigInteger.ONE;
		if (dp[d][l] != null)
			return dp[d][l];
		BigInteger cur = BigInteger.ZERO;
		if (d - 1 >= 0)
			cur = cur.add(solve(d - 1, l + 1));
		cur = cur.add(solve(d, l + 1));
		if (d + 1 <= k)
			cur = cur.add(solve(d + 1, l + 1));
		return dp[d][l] = cur;
	}