Sub permutate(prefix As String, str As String,maxlen As Int)
If str.Length=0 And permutations.IndexOf(prefix.SubString2(0,maxlen))=-1 Then permutations.add(prefix.SubString2(0,maxlen))
For i = 0 To str.Length-1
permutate( prefix & str.charAt(i), str.substring2(0,i) & str.substring2(i+1,str.Length),maxlen)
Next
End Sub
(ArrayList) [ab, ac, ad, ba, bc, bd, ca, cb, cd, da, db, dc]
----------------
(ArrayList) [abc, abd, acb, acd, adb, adc, bac, bad, bca, bcd, bda, bdc, cab, cad, cba, cbd, cda, cdb, dab, dac, dba, dbc, dca, dcb]