import java.io.*;
public class Main
{
public static void main
(String[] args
) {
Permutation.
make(2,
4,
"ABCD".
toCharArray(),
(str
) -> System.
out.
println(str
) ); }
}
class Permutation
{
public interface YeldString
{ void Yeld
(String str
); } private static boolean next(int[] idx,int maxvalue)
{
for(int i=idx.length-1;i>=0;idx[i--]=0) if(++idx[i]<maxvalue) return true;
return false;
}
private static String prepare
(int[] idx,
char[] alphas
) {
char[] str=new char[idx.length];
for(int i=0;i<idx.length;++i) str[i]=alphas[idx[i]];
}
public static void make(int size,char[] alphas,YeldString yeld)
{
int[] idx=new int[size];
do { yeld.Yeld(prepare(idx,alphas)); } while(next(idx,alphas.length));
}
public static void make(int minsize,int maxsize,char[] alphas,YeldString yeld)
{
for(int size=minsize;size<=maxsize;++size) make(size,alphas,yeld);
}
}
aW1wb3J0IGphdmEuaW8uKjsKCnB1YmxpYyBjbGFzcyBNYWluCnsKICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKICAgewogICAgICBQZXJtdXRhdGlvbi5tYWtlKDIsNCwiQUJDRCIudG9DaGFyQXJyYXkoKSwoc3RyKSAtPiBTeXN0ZW0ub3V0LnByaW50bG4oc3RyKSApOwogICB9Cn0KCmNsYXNzIFBlcm11dGF0aW9uCnsKICAgcHVibGljIGludGVyZmFjZSBZZWxkU3RyaW5nIHsgdm9pZCBZZWxkKFN0cmluZyBzdHIpOyB9CiAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gbmV4dChpbnRbXSBpZHgsaW50IG1heHZhbHVlKQogICB7CiAgICAgIGZvcihpbnQgaT1pZHgubGVuZ3RoLTE7aT49MDtpZHhbaS0tXT0wKSBpZigrK2lkeFtpXTxtYXh2YWx1ZSkgcmV0dXJuIHRydWU7CiAgICAgIHJldHVybiBmYWxzZTsKICAgfQogICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgcHJlcGFyZShpbnRbXSBpZHgsY2hhcltdIGFscGhhcykKICAgewogICAgICBjaGFyW10gc3RyPW5ldyBjaGFyW2lkeC5sZW5ndGhdOwogICAgICBmb3IoaW50IGk9MDtpPGlkeC5sZW5ndGg7KytpKSBzdHJbaV09YWxwaGFzW2lkeFtpXV07CiAgICAgIHJldHVybiBuZXcgU3RyaW5nKHN0cik7CiAgIH0KICAgcHVibGljIHN0YXRpYyB2b2lkIG1ha2UoaW50IHNpemUsY2hhcltdIGFscGhhcyxZZWxkU3RyaW5nIHllbGQpCiAgIHsKICAgICAgaW50W10gaWR4PW5ldyBpbnRbc2l6ZV07CiAgICAgIGRvIHsgeWVsZC5ZZWxkKHByZXBhcmUoaWR4LGFscGhhcykpOyB9IHdoaWxlKG5leHQoaWR4LGFscGhhcy5sZW5ndGgpKTsKICAgfQogICBwdWJsaWMgc3RhdGljIHZvaWQgbWFrZShpbnQgbWluc2l6ZSxpbnQgbWF4c2l6ZSxjaGFyW10gYWxwaGFzLFllbGRTdHJpbmcgeWVsZCkKICAgewogICAgICBmb3IoaW50IHNpemU9bWluc2l6ZTtzaXplPD1tYXhzaXplOysrc2l6ZSkgbWFrZShzaXplLGFscGhhcyx5ZWxkKTsKICAgfQp9