//  Data Structures with Java by John R. Hubbard
//  Copyright McGraw-Hill, 2001
//  Problem 4.12 on page 85
//  Recursive Function that prints permutations of a String

public class Pr0412
{ public static void main(String[] args)
  { print("ABC",3) ;
  } 
  public static void print(String s, int n)
  {  print("",s.substring(0,n) ) ;
  }
  public static void print(String left, String right)
  { int n = right.length() ;
    if ( n == 0 ) return ;    // basis #0
    if ( n==1)               // basis #1
    { System.out.println(left+right) ;
      return ;
    }
    StringBuffer s = new StringBuffer(right) ;
    for ( int i=0; i < n; i++)   // recursion
    { char ch0 = s.charAt(0) ; 
      char chI = s.charAt(i) ; 
      s.setCharAt(i,ch0) ;   // swap 0th and
      s.setCharAt(0,chI) ;   // ith characters
      print(left+chI, s.substring(1,n) ) ;
    }
  }
}
