import java.io.File;
import java.util.*;
public class Prednasky {
        public Set<String> citajRiadok(String riadok) {
                Set<String> vysledok = new HashSet<String>();
                Scanner citac = new Scanner(riadok);
                while (citac.hasNext()) {
                        vysledok.add(citac.next().toUpperCase());
                }
                return vysledok;
        }
        public Set<String> spolocnePrednasky(String subor) {
                Scanner citac = null;
                Set<String> vysledok = null;
                try {
                        citac = new Scanner(new File(subor));
                        while (citac.hasNextLine()) {
                                String riadok = citac.nextLine();
                                Set<String> prednaskyVRiadku = citajRiadok(riadok);
                                if (vysledok == null)
                                        vysledok = prednaskyVRiadku;
                                else
                                        vysledok.retainAll(prednaskyVRiadku);
                        }
                } catch (Exception e) {
                        System.err.println("Zle je");
                } finally {
                        if (citac != null)
                                citac.close();
                }
                return vysledok;
        }
        public Set<String> viacAkoPolovica(String subor) {
            Map<String, Integer> pocty = new HashMap<String, Integer>();
            int pocetStudentov = 0;
            // Pre kazdu prednasku zistime, kolko studentov ju navstevuje
            // vysledok ulozime do Map-u
                Scanner citac = null;
            try {
                    citac = new Scanner(new File(subor));
                    while (citac.hasNextLine()) {
                            String riadok = citac.nextLine();
                            Set<String> prednaskyVRiadku = citajRiadok(riadok);
                            // Zvysime pocitadla jednotlivych prednasok studenta
                            for (String prednaska: prednaskyVRiadku) {
                                if (pocty.containsKey(prednaska)) {
                                        pocty.put(prednaska, pocty.get(prednaska) + 1);
                                } else {
                                        pocty.put(prednaska, 1);
                                }
                            }
                            pocetStudentov++;
                    }
            } catch (Exception e) {
                    System.err.println("Zle je");
            } finally {
                    if (citac != null)
                            citac.close();
            }
            // Vyberieme z Map-u tie prednasky (kluce), ktore navstevuje viac ako polovica studentov
            Set<String> vysledok = new HashSet<String>();
            for (String prednaska: pocty.keySet())            
                if (pocty.get(prednaska) >= pocetStudentov/2) 
                        vysledok.add(prednaska);
            return vysledok;
    }
        /**
         * @param args
         */
        public static void main(String[] args) {
                Prednasky prednasky = new Prednasky();
                System.out.println(prednasky.spolocnePrednasky("prednasky.txt"));
        }
}