ААААА, что не нравится этому долбанному валидатору???
package com.javarush.task.task22.task2209;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
/*
Составить цепочку слов
*/
public class Solution {
private static StringBuilder sb = new StringBuilder();
private static ArrayList<String> t;
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedReader reader = new BufferedReader(new FileReader(br.readLine()));
String data = reader.readLine();
StringBuilder result = new StringBuilder().append("");
if(data != null && data.length() > 0)
result = getLine(data.split(" "));
System.out.println(result.toString().trim());
}
public static StringBuilder getLine(String... words) {
String[] w = words;
if(words == null || w.length == 0) return sb;
t = new ArrayList<>(Arrays.asList(w));
StringBuilder tmpSB = new StringBuilder();
ArrayList<String> tmpT = new ArrayList<>(t);
//System.out.println(t);
int min = Integer.MAX_VALUE;
StringBuilder finalSB = new StringBuilder();
//ищем самую длинную возможную цепочку
for(int i = 0; i < w.length; i++)
{
t = new ArrayList<>(tmpT); sb = new StringBuilder();
String sss = t.get(i);
sb.append(sss).append(" ");
t.remove(i);
get(sss);
if(t.size() < min){
min = t.size();
finalSB = new StringBuilder(sb);
if(t.size() != 0) finalSB.append(String.join(" ", t));
}
if(t.size() == 0) break;
}
return finalSB;
}
private static void get(String word)
{
if(t.size() == 0) return;
for(int i = 0; i < t.size(); i++){
if(t.get(i) == null) break;
String w = t.get(i);
if(w.substring(0, 1).toLowerCase().equals(word.substring(word.length()-1).toLowerCase())){
sb.append(w).append(" ");
t.remove(i);
get(w);
}
}
}
}