public static boolean validByMirroring(int[][] squares) {				
		int[][] original 			= squares;
		int[][] originalRight90  	= rotateRight(original);
		int[][] originalRight180 	= rotateRight(originalRight90); // = horizontally mirrored
		int[][] originalRight270 	= rotateRight(originalRight180);// = left 90
		
		int[][] mirrored  		 	= mirrorVertically(original);
		int[][] mirroredRight90  	= rotateRight(mirrored);
		int[][] mirroredRight180 	= rotateRight(mirroredRight90); // = horizontally mirrored
		int[][] mirroredRight270 	= rotateRight(mirroredRight180);// = left 90
		
		int[][][] patterns = { original, originalRight90, originalRight180, originalRight270, 
					           mirrored, mirroredRight90, mirroredRight180, mirroredRight270 };
		
		for (int i = 0; i < patterns.length; i++) {
			for (int j = i; j < patterns.length; j++) {
				if (j > i && Arrays.deepEquals(patterns[i], patterns[j])) {
					return false;
				}
			}
		}
		return true;
	}