Если я правильно понимаю предпослений пункт, то в строку вывода не надо добавлять те города, которые не коннектятся друг с другом (В моем примере таки добавлено 3). И, логично было бы не приклеивать к отсортированной строке те города. что не вписались. Но тогда еще и последний пункт зажигается. Что же не так у меня или валика?
public static StringBuilder getLine(String... words) {
        Arrays.sort(words);
        StringBuilder str = new StringBuilder();
        StringBuilder lost = new StringBuilder();
        if (words == null || words.length == 0)
            return str;
        str.append(words[0]);
        for (int j = 1; j < words.length; j ++) {
            String begin = str.substring(0, 1).toLowerCase();
            String end = str.substring(str.length() - 1, str.length()).toLowerCase();
            String beginJ = words[j].substring(0, 1).toLowerCase();
            String endJ = words[j].substring(words[j].length() - 1, words[j].length());
            if (beginJ.equals(end)) {
                str.append(" ");
                str.append(words[j]);
                words[j] = null;
            } else if (endJ.equals(begin)) {
                String tmp = words[j] + " " + str;
                str = new StringBuilder(tmp);
                words[j] = null;
            }
            else {
                lost.append(" ");
                lost.append(words[j]);
            }

        }
        return str.append(lost);
    }
А не проходит вот это пункт: Все слова переданные в метод getLine должны быть включены в результирующую строку, если это возможно.