Вывод правильный, но последний пункт не проходит.
public static void main(String[] args) throws IOException {
ArrayList<String> list = new ArrayList<>();
String fileName = null;
try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) {
fileName = reader.readLine();
}
//Path outputFilePath = Paths.get(fileName);
//try(BufferedReader fileReader = Files.newBufferedReader(outputFilePath, Charset.forName("windows-1251"))) {
try(BufferedReader fileReader = new BufferedReader(new InputStreamReader(new FileInputStream(fileName)))) {
String line;
while ((line = fileReader.readLine()) != null) {
String[] words = line.split(" ");
for (int i = 0; i < words.length; i++)
list.add(words[i].trim());
}
}
for(int i = 0; i < list.size(); i++) {
String s1 = list.get(i);
String s2 = new StringBuilder(s1).reverse().toString();
for(int g = 0; g < list.size(); g++)
if (g != i && s2.equals(list.get(g))){
Pair p1 = new Pair(s1, s2);
Pair p2 = new Pair(s2, s1);
if (!result.contains(p1) && !result.contains(p2)) {
result.add(p1);
System.out.println(p1.toString());
}
}
}
}