private int placementCallB(Design bounded, Child located){
        int edgecount = 0;
        if (!bounded.edges().isEmpty()){
            boundDesignSize = bounded.edges().size();
            //empties
            if (located.isEmpty()){
                Location a = located.location();
                if (bounded.contains(a)){
                    ArrayList<Child> adjs = locatedSource.lookupTable().get(located);
                    for (Child c:adjs){
                        Location b = c.location();
                        Edge e = new Edge(a,b);
//                        System.out.println("child "+located);
                        if (bounded.contains(e)){
                            edgecount++;
                            intersection.add(new Edge(a,b));
                        }
                    }
                }
                if (edgecount > 0){
                    Weight w = new Weight(1, 1);
                    applicants.put(located,w);
                    return 1;
                }
                else {
                    return 0;
                }
            }
            //non empties
            else {
                Weight w = new Weight(0,0);
                for ( Child c : located.children() ){
                    //accumulate the weights of the children of 'located'
                    int top = placementCallB(bounded, c);
                    w.addTopValue(top);
                }
                w.addBottomValue(located.size());
                applicants.put(located,w);
                if (w.decide()!=0)
                    threshold.applyWeight(w);//new Weight(w.decide(),1));
                return (int)(w.topValue());
            }
        }return 0;//nothing here to intersect with
    }