int crosswordFormation(String[] words) {
int res = 0;
for (int v1 = 0; v1 < 4; v1++) {
for (int h1 = 0; h1 < 4; h1++) {
if (h1 != v1) {
for (int v2 = 0; v2 < 4; v2++) {
if (v2 != v1 && v2 != h1) {
int h2 = 0;
while (h2 == v1 || h2 == h1 || h2 == v2) h2++;
res += cross2words(words[v1], words[v2], words[h1], words[h2]);
}
}
}
}
}
return res;
}
//one of the ugliest function I ever wrote...
int cross2words(String v1, String v2, String h1, String h2) {
int res = 0;
for (int i = 0; i < v1.length(); i++) {
for (int j = 0; j < h1.length(); j++) {
if (v1.charAt(i) == h1.charAt(j)) {
for (int k = 0; k < v2.length(); k++) {
for (int l = j + 1; l < h1.length(); l++) {
if (v2.charAt(k) == h1.charAt(l) && l - j > 1) {
for (int i2 = i + 2; i2 < v1.length(); i2++) {
for (int j2 = 0; j2 < h2.length(); j2++) {
if (v1.charAt(i2) == h2.charAt(j2)) {
for (int k2 = k + 2; k2 < v2.length(); k2++) {
for (int l2 = j2 + 1; l2 < h2.length(); l2++) {
if (v2.charAt(k2) == h2.charAt(l2) && l2 - j2 > 1) {
if (i < i2 && k < k2 && l - j == l2 - j2 && i2 - i > 1 && i2 - i == k2 - k) {
res++;
}
}
}
}
}
}
}
}
}
}
}
}
}
return res;
}