protected Set<Location> clear(Location location) {
		Set<Location> cascade = new HashSet<Location>();
		cascade.add(location);
		// bfs search for zero count squares
		if(count(location) == 0) {
			Queue<Location> frontier = new LinkedList<Location>();
			frontier.add(location);

			Set<Location> visited = new HashSet<Location>();
			visited.add(location);

			while(!frontier.isEmpty()) {
				Location current = frontier.remove();
				for(Location next : neighbors(current, ADJACENT)) {
					if(!visited.contains(next) && count(next) == 0) {
						frontier.add(next);
					}
					visited.add(next);
				}
			}
			cascade.addAll(visited);
		}
		return cascade;
	}