//------------// Introduction to Programming Using Java: An Object-Oriented Approach//	Arnow/Weiss//------------// demonstration of the permutations method // Chapter 11 section 11.6 Page 480// The Set class is included here for convenienceimport java.io.*;import java.util.*;public class Demo_perms {	static void permutations(Vector v, Set dict, String p, String letters){		if  (letters.length()==0)  {			if  (dict.contains(p))				v.addElement(p);			return;		}		int    i;		i  =  0;		while  (i<letters.length())  {			String  newPermutation  =  p + letters.substring(i,i+1);			String  newLetters = letters.substring(0,i) + letters.substring(i+1);			permutations(v,dict,newPermutation,newLetters);			i++;		}	}	public static void main(String[] a) throws Exception {		Set d = new Set(26000);		BufferedReader br = new BufferedReader(					new InputStreamReader(					new FileInputStream(					new File(a[0]))));		int maxlength=a[1].length();		String word = br.readLine();		while (word!=null) {			if (word.length()<=maxlength)				d.addElement(word);			word = br.readLine();		}		Vector v = new Vector();		permutations(v,d,"",a[1]);		Enumeration e = v.elements();		while (e.hasMoreElements())			System.out.println((String)e.nextElement());	}}class Set  {	public  Set()  {		vector  =  new  Vector();	}	public  Set(int n)  {		vector  =  new  Vector(n);	}	public  boolean  isEmpty()  {		return  vector.isEmpty();	}	public  int  size()  {		return  vector.size();	}	public  boolean  contains(Object  o)  {		Enumeration  enum  =  vector.elements();		while  (enum.hasMoreElements())  {			Object  elem  =  enum.nextElement();			if  (elem.equals(o))				return  true;		}		return  false;	}	public  void  addElement(Object  o)  {		if  (!contains(o))			vector.addElement(o);	}	public  Object  clone()  {		Set  destSet  =  new  Set();		Enumeration  enum  =  vector.elements();		while  (enum.hasMoreElements())			destSet.addElement(enum.nextElement());		return  destSet;	}	public  Set  union(Set  s)  {		Set  unionSet  =  (Set)s.clone();		Enumeration  enum  =  vector.elements();		while  (enum.hasMoreElements())			unionSet.addElement(enum.nextElement());		return  unionSet;	}	public  Set  intersection(Set  s)  {		Set  interSet  =  new  Set();		Enumeration  enum  =  this.vector.elements();		while  (enum.hasMoreElements())  {			Object  elem  =  enum.nextElement();			if  (s.contains(elem))				interSet.addElement(elem);		}		return  interSet;	}	public Enumeration  elements()  {		return  vector.elements();	}	public  void  print(PrintStream  ps)  {		Enumeration  enum  =  vector.elements();		while  (enum.hasMoreElements())  {			ps.print(enum.nextElement().toString());			ps.print("  ");		}	}	private Vector  vector;}