public static BigInteger semiPrimeBI(BigInteger p, BigInteger x, BigInteger y, int size)
	{
		count++;
		if(x.equals(p)) return BigInteger.ONE.negate(); 
		if(p.equals(x.multiply(y)) && !x.equals(BigInteger.ONE)) 
			return x;
		for(int i=0; i<10; i++)
			for(int j=0; j<10; j++)
			{
				BigInteger mod =  new BigInteger(modulo[size+1]+"");
				BigInteger l = mod.divide(BigInteger.TEN).multiply(new BigInteger(i+"")).add(x);
				BigInteger m = mod.divide(BigInteger.TEN).multiply(new BigInteger(j+"")).add(y);;
				if(!(l.multiply(m).compareTo(p)==1) && size<pl)
					if(l.multiply(m).mod(mod) .equals( p.mod(mod)))
					{
						BigInteger res = semiPrimeBI(p,l,m,size+1);
						if(res!=BigInteger.ONE.negate()) return res;
					}
			}
		return BigInteger.ONE.negate();
	}