private void run() {
		// repita ate que a lista de algum homem esteja vazia ou todos estejam casados
		while(!someManListEmpty() && !everyoneEngaged()) {
			boolean existFreeMan = true;
			// enquanto existir homem solteiro
			while(existFreeMan) {
				Person currentMan = existFreeMan();
				if(currentMan != null && currentMan.getPreferences().size() > 0) {
					//System.out.println(currentMan + ": " +  currentMan.getPreferences().get(0).toString());
					//System.out.println("free man = " + currentMan.getName());
					//System.out.println("engagements = " + currentMan.getEngagements());
					List<Person> head = currentMan.getPreferences().get(0);
					if(head.size() > 0) {
						for(Person topWoman : head) {
							if(containsManInPreferences(currentMan, topWoman)) {
								addMarriage(currentMan, topWoman);
								checkSuccesorMen(currentMan, topWoman);		
							}
						}
						checkMultiplyEngagedWomen();	
					}
				}
				else existFreeMan = false;
			}
		}
		if(everyoneEngaged()) {
			System.out.println("que legal! todos estao casados:");
			printResults();	
		}
		else {
			System.out.println("que triste. nao existe solucao.");
		}
	}