private boolean backtracking(ArrayList<Clausula> clau, Quadricula qu, int j) {
        if (clau.size() == j) { // Tenim una solucio
            return true;
        } else {
            Clausula c = clau.get(j);
            for (ClausulaNom cn : c.getClausula()) {
                Element e = new Element();
                e.setAssignatura(c.getAssignatura());
                e.setAula(cn.getAula());
                e.setGrupo(c.getGrup());
                int duracio = c.getDuracio();
                int esVal = 0;        
                for (int i = 0; i < duracio; ++i) {
                    int hor = cn.getHora()+i;
                    String di = cn.getDia();
                    qu.afegirElement(di, hor, e);
                    if (! assignacioValida(qu, e, di, hor,cn,c,duracio,i)) ++esVal;
                }
                if (esVal == 0) {
                    boolean b = backtracking(clau, qu,j+1);
                    if (b) return true;
                    else {
                        for (int i = 0; i < duracio; ++i) {
                            int hor = cn.getHora() + i;
                            String di = cn.getDia();
                            qu.borrarElement(di, hor, e);
                        }
                    }
                } 
                else {
                    for (int i = 0; i < duracio; ++i) {
                        int hor = cn.getHora() + i;
                        String di = cn.getDia();
                        qu.borrarElement(di, hor, e);
                    }
                }
            }
            return false;
        }
    }