private void countLatest(Statement s, List<Statement> succ) {
        //a = earliest + postponableIn
        //b = intersect (nextEarliest + nextPostponableIn) for every successor
        //c = result = intersect of a with union of e_use and !b
        List<Statement> a = new LinkedList<Statement>();
        for (Statement l: helpUnion(earliest.get(s), postponableIn.get(s)))
            a.add(l);

        List <Statement> b = new LinkedList<Statement>();
        if (!(succ == null))
            if(!succ.isEmpty()) {
                List<Statement> newsucc = new LinkedList<Statement>();
                for(Statement l: succ)
                    newsucc.add(l);
                Statement first = newsucc.get(0);
                newsucc.remove(first);
                for(Statement l: helpUnion(earliest.get(first), postponableIn.get(first)))
                    b.add(l);

                if(!newsucc.isEmpty())
                    for(Statement l: newsucc) {
                        List<Statement> t = helpIntersect(b, helpUnion(earliest.get(l), postponableIn.get(l)));
                        //b.clear();
                        //for(Statement e: t)
                        //    b.add(e);
                        for(Statement e: b)
                            if(!t.contains(e))
                                b.remove(e);
                    }
            }//found intersect of unions for successors

        List<Statement> c = new LinkedList<Statement>();
        for (Statement l: a)
            c.add(l);
        for (Statement l: a)
            if(!(compareExpressions(s, l) || !b.contains(l)))
                c.remove(l);

        latest.put(s, new LinkedList<Statement>());
        latest.get(s).addAll(c);
    }