private boolean CorrectCycleDecomp(int[][] CycleD){
		int CycleNumber = 0;
		int CycleIndex = 0;
		ArrayList<Integer> cycle = new ArrayList<Integer>(n);
		while(CycleD[CycleNumber][0] != 0){
			while(CycleD[CycleNumber][CycleIndex] != 0){
				cycle.add(CycleD[CycleNumber][CycleIndex]);
				CycleIndex++;
				if(CycleIndex >= CycleD[CycleNumber].length){//we have finished the last column
					break;
				}
			}
			int[] theCycle = new int[cycle.size()];
			for(int j = 0; j < theCycle.length; j++){
				theCycle[j] = cycle.get(j);
			}
			if(!CorrectCycle(theCycle)){
				return false;
			}
			cycle.clear();
			CycleIndex = 0;
			CycleNumber++;
			if(CycleNumber >= CycleD.length){//we have finished the last row 
				break;
			}
		}
		return true;
	}