import java.util.*;
class AnaliseCombinatoria {
	// O método recebe um ArrayList com os números a serem combinados
	// O retorno é um iterator de um ArrayList, no qual cada elemento desse iterator 
	// é um outro ArrayList que contém uma das permutações possíveis
	// Este método faz a permutação de qualquer número de elementos

	static Iterator permutacaoSimples(ArrayList numeros) {
		ArrayList combinacoes = new ArrayList();
		if (numeros.size() == 1 ) {
			combinacoes.add(numeros);
		}
		else {
			for (int x = 0; x < numeros.size(); x++) {
				
				ArrayList clone =  (ArrayList)numeros.clone();
				clone.remove(0);
				for (Iterator it1 = permutacaoSimples(clone); it1.hasNext(); ) {
					ArrayList linha = new ArrayList();
					linha.add(numeros.get(0));
					for (Iterator it2 = ((ArrayList)it1.next()).iterator(); it2.hasNext(); ) {
						linha.add((Integer)it2.next());
					}
					combinacoes.add(linha);
				}

				numeros.add((Integer)numeros.remove(0));
			}
		}

		System.gc();						
		return combinacoes.iterator();
	}

	public static void main(String[] args) 
	{

		ArrayList numeros = new ArrayList();
		for (int x = 0 ; x < args.length; x++ ) {
			numeros.add(new Integer(args[x]));
		}

		for (Iterator it1 = permutacaoSimples(numeros); it1.hasNext() ;) {
			for (Iterator it2 = ((ArrayList)it1.next()).iterator(); it2.hasNext();) {
				System.out.print(it2.next() + " ");
			}	
		System.out.println(" ");
		}
	}
}
