package test01;
public class task06 {
static int[] data = new int[11];
static boolean check() {
if (check2() && check3() && check4() && check5() && check6() && check7() && check8() && check9() && check10())
return true;
return false;
}
static boolean check2() {
if (data[5] == 3 && data[2] != 1) {
return false;
} else if (data[5] == 4 && data[2] != 2) {
return false;
} else if (data[5] == 1 && data[2] != 3) {
return false;
} else if (data[5] == 2 && data[2] != 4) {
return false;
}
return true;
}
static boolean check3() {
int[] temp = { 0, 3, 6, 2, 4 };
for (int i = 1; i < temp.length; i++) {
if (data[3] != i && temp[data[3]] == temp[i])
return false;
}
return true;
}
static boolean check4() {
if (data[4] == 1 && data[1] != data[5]) {
return false;
} else if (data[4] == 2 && data[2] != data[7]) {
return false;
} else if (data[4] == 3 && data[1] != data[9]) {
return false;
} else if (data[4] == 4 && data[6] != data[10]) {
return false;
}
return true;
}
static boolean check5() {
if (data[5] == 1 && data[5] != data[8]) {
return false;
} else if (data[5] == 2 && data[5] != data[4]) {
return false;
} else if (data[5] == 3 && data[5] != data[9]) {
return false;
} else if (data[5] == 4 && data[5] != data[7]) {
return false;
}
return true;
}
static boolean check6() {
if (data[6] == 1 && (data[8] != data[2] || data[8] != data[4])) {
return false;
} else if (data[6] == 2 && (data[8] != data[1] || data[8] != data[6])) {
return false;
} else if (data[6] == 3 && (data[8] != data[3] || data[8] != data[10])) {
return false;
} else if (data[6] == 4 && (data[8] != data[5] || data[8] != data[9])) {
return false;
}
return true;
}
static boolean check7() {
int[] temp = new int[5];
for (int i = 1; i < data.length; i++) {
temp[data[i]] += 1;
}
int min = Integer.MAX_VALUE;
int ans = 0;
for (int i = 1; i < temp.length; i++) {
if (temp[i] < min) {
min = temp[i];
ans = i;
}
}
int count = 0;
for (int i = 1; i < temp.length; i++) {
if (min == temp[i])
count++;
}
if (count != 1 || ans != data[7])
return false;
return true;
}
static boolean check8() {
if (data[8] == 1 && Math.abs(data[8] - data[7]) == 1) {
return false;
} else if (data[8] == 2 && Math.abs(data[8] - data[5]) == 1) {
return false;
} else if (data[8] == 3 && Math.abs(data[8] - data[2]) == 1) {
return false;
} else if (data[8] == 4 && Math.abs(data[8] - data[10]) == 1) {
return false;
}
return true;
}
static boolean check9() {
if (data[1] == data[6]) {
if (data[9] == 1 && data[6] == data[5]) {
return false;
} else if (data[9] == 2 && data[10] == data[5]) {
return false;
} else if (data[9] == 3 && data[2] == data[5]) {
return false;
} else if (data[9] == 4 && data[9] == data[5]) {
return false;
}
} else {
if (data[9] == 1 && data[6] != data[5]) {
return false;
} else if (data[9] == 2 && data[10] != data[5]) {
return false;
} else if (data[9] == 3 && data[2] != data[5]) {
return false;
} else if (data[9] == 4 && data[9] != data[5]) {
return false;
}
}
return true;
}
static boolean check10() {
int[] temp = new int[5];
for (int i = 1; i < data.length; i++) {
temp[data[i]] += 1;
}
int min = Integer.MAX_VALUE;
int max = Integer.MIN_VALUE;
for (int i = 1; i < temp.length; i++) {
if (temp[i] < min)
min = temp[i];
if (temp[i] > max)
max = temp[i];
}
int ans = max - min;
if (data[10] == 1 && ans != 3) {
return false;
} else if (data[10] == 2 && ans != 2) {
return false;
} else if (data[10] == 3 && ans != 4) {
return false;
} else if (data[10] == 4 && ans != 1) {
return false;
}
return true;
}
static void fun(int no) {
if (no == 11) {
if (check())
print();
return;
}
for (int i = 1; i < 5; i++) {
data[no] = i;
fun(no + 1);
}
}
static void print() {
for (int i = 1; i < data.length; i++) {
System.out.print((char) ('A' + data[i] - 1) + " ");
}
System.out.println();
}
public static void main(String[] args) {
fun(1);
}
}