public static void main(String[] args) {
		if (args.length != 1) {
			System.out.println("Usage: Main numOfHints");
			System.exit(1);
		}

		// Informative output
		System.out.println("Using K=" + K);

		// Create
		BitSet message = generateRandomBitSet(64);

		// Informative output
		System.out.println("\nOriginal Message:\nM=" + bitSetString(message));

		// Creating commitment source
		System.out.print("Creating commitment source...");

		TimedCommitmentSource source = new TimedCommitmentSource(message, K);
		System.out.println(" done.");

		// Create commitment
		TimedCommitment commitment = source.generateCommitment();

		// Send hints
		System.out.print("Sending hints...");

		int numHints = Integer.parseInt(args[0]);
		assert (0 <= numHints) && (numHints <= K);

		for (int i = 2; i <= numHints; ++i) {
			commitment.addHint(source.generateHint(i));
		}

		System.out.println(" done.");

		// Decode message
		System.out.print("Decoding message...");

		BitSet decodedMessage = commitment.decodeMessage();
		System.out.println(" done.");

		// Informative output
		System.out.println();
		System.out.println("Decoded Message:");
		System.out.println("M=" + bitSetString(decodedMessage));

		// Verify correctness
		boolean success = message.equals(decodedMessage);

		// Informative output
		System.out.println();
		System.out.println("===");

		if (success) {
			System.out.println("Success, messages match.");
		} else {
			System.out.println("Failure, messages don't match!");
		}

		System.out.println("===");
	}