public void checkSolution( Contestant submitter , String solution ) {
		try {
			
			//determine the cards that must be used
			String cards = "";
			for ( int i = 0 ; i < this.m_cards.length ; i++ ) {
				cards += this.m_cards[ i ] + " ";
			}
			cards = cards.trim();
			
			//check the user's solution
			Process runChecker = Runtime.getRuntime().exec( "java -jar checker.jar " + ONE_SIXTY_THREE + " " + NUM_CARDS + " " + cards + " " + solution );
			runChecker.waitFor();
			
			//notify user of result
			if ( runChecker.exitValue() == 0 ) {
				
				//TODO notify all other users of valid solution
				for ( Contestant c : this.m_contestants ) {
					MessageWriter.writeAnswerAccepted( c.getCommunicator() , submitter.getDisplayName() );
				}
				System.out.println( "ok" );
				
				//update contestant score
				submitter.incrementScore();
				
				endRound();
			} else {
				
				//TODO notify users of failed solution
				for ( Contestant c : this.m_contestants ) {
					MessageWriter.writeAnswerRejected( c.getCommunicator() , c.getDisplayName() , solution );
				}
				System.out.println( "failed" );
			}
		} catch ( IOException e ) {
			
			//TODO notify user of internal error
			for ( Contestant c : this.m_contestants ) {
				MessageWriter.writeInternalError( c.getCommunicator() );
			}
		} catch ( InterruptedException e ) {
			
			//TODO notify user of internal error
			for ( Contestant c : this.m_contestants ) {
				MessageWriter.writeInternalError( c.getCommunicator() );
			}
		}
	}