Everything seems to be ok but don't know why i'm still fail
package com.codegym.task.task22.task2209;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
/*
Make a word chain
*/
public class Solution {
public static void main(String[] args) throws IOException {
// ...
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String fileName = reader.readLine();
/*
BufferedReader reader1 = new BufferedReader(new FileReader(fileName));
StringBuilder sb = new StringBuilder();
String s;
while ((s = reader1.readLine()) != null){
sb.append(s);
sb.append(" ");
}
String str[] = sb.toString().split(" ");
*/
StringBuilder result = getLine();
System.out.println(result.toString());
}
public static StringBuilder getLine(String... words) {
StringBuilder sb = new StringBuilder("");
if(words.length == 0) return sb;
Set<String> set = new HashSet<>(Arrays.asList(words));
words = new String[set.size()];
int a =0;
for(String s: set){
words[a++] = s;
}
ArrayList<Word> words1 = new ArrayList<>();
for(int i = 0; i < words.length; i++){
String s = words[i];
Word word = new Word(s.toLowerCase().charAt(0), s.toLowerCase().charAt(s.length() - 1), i);
words1.add(word);
}
ArrayList<Integer> indexs = new ArrayList<>();
for(int i = 0; i < words1.size(); i++){
Word word = words1.get(i);
ArrayList<Word> words2 = new ArrayList<>(words1);
words2.remove(i);
Myclass.longestTails(new ArrayList<Integer>(), word, words2);
if(indexs.size() < Myclass.indexs.size()) indexs = Myclass.indexs;
}
for(int j = 0; j < indexs.size(); j++){
int i = indexs.get(j);
sb.append(words[i]);
if(j < indexs.size() - 1)
sb.append(" ");
}
return sb;
}
}
class Myclass{
static ArrayList<Integer> indexs = new ArrayList<>();
public static void longestTails(ArrayList<Integer> list, Word word, ArrayList<Word> wordList){
list.add(word.index);
if(indexs.size() < list.size()) indexs = list;
if(wordList.size() == 0){
return;
}else{
for(int i = 0; i < wordList.size(); i++){
ArrayList<Integer> list2 = new ArrayList<>(list);
Word word1 = wordList.get(i);
if(word.end == word1.start){
ArrayList<Word> list1 = new ArrayList<>(wordList);
list1.remove(i);
longestTails(list2, word1,list1 );
}
}
}
}
}
class Word{
char start;
char end;
int index;
public Word(char start, char end, int index){
this.end = end;
this.index = index;
this.start = start;
}
}