private void shrink(int extra, int[] values, int[] min) {
		int count = 1 + (values.length - 1) / 2;
		int[] tv = new int[count];
		int[] tm = new int[count];
		for (int i = 0; i < count; i++) {
			tv[i] = values[i * 2];
			tm[i] = min[i * 2];
		}
		extra = distribute(-extra, tv, tm);
		for (int i = 0; i < count; i++) {
			values[i * 2] = tv[i];
		}

		if (extra < 0) {
			// None are accepting less space, so force them
			count = 1 + (values.length - 1) / 2;
			while (extra > 0 && count > 0) {
				int amt = extra / count;
				if (amt > -1) {
					amt = -1;
				}
				count = 0;
				for (int i = 0; i <= values.length && extra < 0; i += 2) {
					if (values[i] > 0) {
						values[i] += amt;
						min[i] += amt;
						extra += amt;
						count++;
					}
				}
			}
		}
	}