private void cutCarreeNeighborRule(int x, int y) {
		/*
		 * Make a backup of the number and cut it out.
		 */
		int cutCandidate = sudokuGridStorage[y][x];
		sudokuGridStorage[y][x] = 0;
		/*
		 * Calculate the offsets for the carree.
		 */
		int xos = (x / this.carreeSize) * this.carreeSize;
		int yos = (y / this.carreeSize) * this.carreeSize;

		/*
		 * Check if this violates the "neighbor-rule" for carrees, by checking
		 * every other cell in the carree.
		 */
		for (int y1 = 0; y1 < this.carreeSize; y1++) {
			for (int x1 = 0; x1 < this.carreeSize; x1++) {
				/*
				 * If the cell is empty
				 */
				if (sudokuGridStorage[yos + y1][xos + x1] == 0) {
					/*
					 * If the cell is not the same as the cell of the cut
					 * candidate
					 */
					if (xos + x1 != x || yos + y1 != y) {
						/*
						 * If it is not neighbored by the cut candidate again,
						 * it must not be cut out.
						 */
						if (!isNeighboredBy(xos + x1, yos + y1, cutCandidate)) {
							/*
							 * Put the candidate back in the cell and return
							 * false because the cell was not cut.
							 */
							sudokuGridStorage[y][x] = cutCandidate;
							return;
						}
					}
				}
			}
		}
	}