import java.awt.*;
class PermutableString {
  private StringBuffer s; 
  private TextArea g;
  private int outputWidth;
  private int maxWordsAcross;
  private int count = 0;
  PermutableString(String x) {
   s = new StringBuffer(x);
  }
  public void setOutputArea(TextArea output)
  {
	g = output;
	outputWidth = g.getColumns();
    maxWordsAcross = outputWidth/(s.length()+2);
  }
  public void permute(int m)
  {
     int i;
     if (m == 1) { /* Terminate recursion: print string */
       printString(); 
     }
     else {
       for(i=0; i < m; i++) {
	   swap(i, m-1);
	   permute(m-1);
	   swap(i, m-1);
       }
     }
  }
/* Swap characters at positions i and j */
private void swap(int i, int j)
{
  char temp;

  temp = s.charAt(i);
  s.setCharAt(i, s.charAt(j));
  s.setCharAt(j, temp);
}
private void printString() 
{
  g.appendText(s+"  ");
  count++;
  if (count >= maxWordsAcross){
   count = 0;
   g.appendText("\n");
  }
}
public int getLength() 
{
  return(s.length());
}
public void setString(String x)
{
  s = new StringBuffer(x); 
  maxWordsAcross = outputWidth/(s.length()+2);
}
}
