protected void process(int att, int pos, BitSet C, double[][] D, double[][] minGen) 
	{
		if  (C.cardinality() < minSup) return;
		if (!addCandidate(minGen, C)) return;
		
		
		if (Main.printResult)
		{
			System.out.print(" Closed " + toStringPattern(D) +" ; ");
			System.out.println("Generator " +toStringPattern(minGen) + " --- " + toStringBitSet(C));
		}
		
		// for Trie version : if D is canonical, we could free main memory
		// of its attached generators 
		// (i.e. removing from the trie the associated word)
		
		
		gensCount++;	

		for (int i = attCount-1; i >= att; i--)
		{
			if (D[i][0] == D[i][1])  continue;
			minGenL  = clonePattern(minGen);
			minGenL[i][0]  = domains[i].higher(D[i][0]);
			if (minGenL[i][0] <= minGenL[i][1])
			{
				prime = prime(minGenL,C);
				process(i, 1, prime, prime(prime), minGenL);
			}

			if (!(i == att && pos == 1))
			{
				minGenR  = clonePattern(minGen);
				minGenR[i][1]  = domains[i].lower(D[i][1]);
				if (minGenR[i][0] <= minGenR[i][1])
				{
					prime = prime(minGenR,C);
					process(i, 0, prime, prime(prime), minGenR);
				}
			}

		}
	}