protected void process(double[][] B, int att, int pos, BitSet C, double[][] D) 
	{
		if (!isCanonical(B, D, att) || (C.cardinality() < minSup) ) return;

		if (Main.printResult)
			System.out.println("Closed " +toStringPattern(D) + " --- " + toStringBitSet(C));
		
		closedCount++;

		for (int i = att; i < attCount; i++) 
		{
			if (D[i][0] == D[i][1])  continue;
			if (!(i == att && pos == 1))
			{
				patternR = clonePattern(D);
				patternR[i][1] = domains[i].lower(D[i][1]);
				if (patternR[i][0] <= patternR[i][1])
				{
					prime = prime(patternR,C);
					process(patternR, i, 0, prime, prime(prime));
				}
			}
			patternL = clonePattern(D);
			patternL[i][0] = domains[i].higher(D[i][0]);
			if (patternL[i][0] <= patternL[i][1])
			{
				prime = prime(patternL,C);
				process(patternL, i, 1, prime, prime(prime));
			}
		}
	}