public static RangeMatrix Get(int r) {
			RangeMatrix ret;
			if (!dictionary.TryGetValue(r, out ret)) {
				ret = new RangeMatrix(r);
				dictionary.Add(r, ret);
			}
			return ret;
		}
		private RangeMatrix(RangeMatrix a) {
			matrix = (bool[,])a.matrix.Clone();
		}
		public static RangeMatrix operator -(RangeMatrix a, RangeMatrix b) {
			RangeMatrix result = new RangeMatrix(a);
			for (int i = 0; i < b.matrix.GetLength(0); i++) {
				for (int j = 0; j < b.matrix.GetLength(1); j++) {
					if (b.matrix[i, j]) {
						result.matrix[i, j] = false;
					}
				}
			}
			return result;
		}