public static void main (String[] args)
	{
		if (args.length > 2) // Ensure that there are no more than two arguments
		{
			System.out.println("\nInvalid number of arguments!\n");
			return;
		}
		else if (args.length < 1) // Ensure that there is at least one argument
		{
			System.out.println("\nMust specify the number of discs!\n");
			return;
		}
		else
		{
			int numDiscs = 0;
			boolean option = false;
			TowersOfHanoi myTowers = null;

			try
			{
				numDiscs = Integer.parseInt(args[0]); // Ensure valid integer argument
			}
			catch (Exception e)
			{
				System.out.println("\nInvalid number of discs argument!\n");
				return;
			}

			if (args.length == 2) 
				if(args[1].equalsIgnoreCase("-v")) // check for verbose option
					option = true;
				else 
				{
					System.out.println("\nInvalid verbose option argument!\n");
					return;
				}

			myTowers = new TowersOfHanoi(numDiscs, option); // Build the tower with main's arguments

			if(myTowers.towerA.peek() == null) // Ensure the initial stack for tower A is populated        
				System.out.println("\nAbort! Failed to build the tower!\n");       	
			else    	
				try
			{
					System.out.println("\nInitial state of the Towers of Hanoi:");
					System.out.println(myTowers.toString());

					myTowers.solve(); // Ensure the solution finding process is exception free

					System.out.println("Final state of the Towers of Hanoi:");
					System.out.println(myTowers.toString());

					if(myTowers.towerB.size() == numDiscs) // Check to see if everything was moved		   	        
						System.out.println("Done! " + myTowers.numOfMoves + " moves were required to solve " + 
								myTowers.numOfDiscs + " discs.\n");
					else
						System.out.println("Bummer! no solution found, recursion failed!");			   	     
			}
			catch (Exception e)
			{
				System.err.println("ERROR: " + e.getMessage());
				return;
			}   	               	       
		}
	}