private void propagateChange(char c) {
		List<Integer> valueList = getPossibleValues(c);
		if (valueList.size() == 1) {
			int value = -1;
			for (int i = 0; i < possible[c-'A'].length; i++) {
				if (possible[c-'A'][i]) {
					value = i;
					break;
				}
			}
			this.value[c-'A'] = value;
		} 
		
		boolean[] possibles = this.possible[c-'A'];
		int equalCount = 0;
		for (int i = 0; i < this.possible.length; i++) {
			if (deepEquals(possibles, this.possible[i])) {
				equalCount++;
			}
		}
		if (equalCount == valueList.size()) {
			for (char other = 'A'; other <= 'J'; other++) {
				if (!deepEquals(possibles, this.possible[other-'A'])) {
					remove(other, valueList);
				}
			}
		}
		
		lookForSingles();
	}