public boolean valid(Vertice current) {
			
			Line l = Line.defineByPoints(current, new Point(current.getX().add(BigDecimal.ONE), current.getY()));
			
			LinkedList<Point> valid = new LinkedList<Point>();
			for (Segment s : this) {
				Point p = l.intersects(s.getLine());
				if (p != null
						&& p.getX().compareTo(max(s.getP1().getX(), s.getP2().getX())) < 0
						&& p.getX().compareTo(min(s.getP1().getX(), s.getP2().getX())) > 0) {
					
					valid.add(p);
				}
			}

			if (valid.isEmpty()) { 
				return false;
			}
			
			valid.add(current);
			Collections.sort(valid, COMPARATOR_BY_X);
			
			
			Iterator<Point> it = valid.iterator();
			boolean found = false;
			int before = 0;
			int after = 0;
			while(it.hasNext()) {
				Point p = it.next();
				if (p.getX().compareTo(current.getX()) == 0) {
					found = true;
					continue;
				}
				
				if (found) {
					after++;
				} else {
					before++;
				}
				
			}
			return (before % 2 == 1 || after % 2 == 1);
		}