Кто нибудь может объяснить, как это работает? (вопросы в комментах) (полностью решение не публикую, т.к. это запрещено правилами)
public class Solution {
    public static void main(String[] args) throws Exception {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); // создаём входной поток данных
        ArrayList<String> list = new ArrayList<String>(); // новый динамический массив строк
        int size;
        int min = Integer.MAX_VALUE;     // почему для min мы используем MAX.VALUE?
        int max = Integer.MIN_VALUE;     // и наоборот?
        for (int i = 0; i < 10; i++) {
            list.add(reader.readLine());
            size = list.get(i).length();
            if (size > max) max = size;       // сравниваем значение длины массива с максимальным значением длины в массиве???
            else if (size < min) min = size;  //* задаются обе переменные, т.к. цикл перебирает числа и рано или поздно первое условие не пройдёт и перескочит на второе?
                    }
        for (int i = 0; i < list.size(); i++){ // что происходит в этом цикле?
            if (list.get(i).length() == min){
                min = i;
                break;}
        }
        for (int i = 0; i < list.size(); i++){ // аналогичный вопрос
            if (list.get(i).length() == max){
                max = i;
                break;}
        }