import java.io.File;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
public class Skola {
        public Set<String> prednaskyZRiadku(String s) {
                Set<String> prednasky = new HashSet<String>();
                Scanner riadkovyCitac = new Scanner(s);
                while (riadkovyCitac.hasNext()){
                        prednasky.add(riadkovyCitac.next().toUpperCase());
                }
                return prednasky;
        }
        public Set<String> spolocnePrednasky(String subor) {
                Scanner citac = null;
                Set<String> vysledok = null;
                int pocetStudentov = 0;
                try {
                        citac = new Scanner(new File(subor));
                        while (citac.hasNextLine()) {
                                String line = citac.nextLine();
                                Set<String> prednasky = prednaskyZRiadku(line);
                                if (pocetStudentov == 0)
                                        vysledok = prednasky;
                                else
                                        vysledok.retainAll(prednasky);
                                pocetStudentov++;
                        }
                } catch (Exception e) {
                        System.err.println("Chyba");
                } finally {
                        if (citac != null)
                                citac.close();
                }
                return vysledok;
        }
        public Set<String> prednaskySViacAko(String subor, int pocet) {
                Scanner citac = null;
                Map<String, Integer> tabulka = new HashMap<String, Integer>();
                int pocetStudentov = 0;
                try {
                        citac = new Scanner(new File(subor));
                        while (citac.hasNextLine()) {
                                Set<String> prednasky = prednaskyZRiadku(citac.nextLine());
                                Iterator<String> it = prednasky.iterator();
                                while (it.hasNext()) {
                                        String prednaska = it.next();
                                        if (tabulka.containsKey(prednaska)) {
                                                tabulka.put(prednaska, tabulka.get(prednaska) + 1);
                                        } else {
                                                tabulka.put(prednaska, 1);
                                        }
                                }
                                pocetStudentov++;
                        }
                } catch (Exception e) {
                        System.err.println("Chyba");
                } finally {
                        if (citac != null)
                                citac.close();
                }
                Set<String> vysledok = new HashSet<>();
                for (String prednaska: tabulka.keySet()) {
                        if (tabulka.get(prednaska) >= pocet) {
                                vysledok.add(prednaska);
                        }
                }
                return vysledok;
        }
}