public static Operator generateRandomOp(int maxDepth, boolean leafs){
		Random r= new Random();
		Class<? extends Operator> wich = extenders[r.nextInt(extenders.length-(enabledIf?0:1))];
		int ar = extenderArity(wich);

		Expression branch[] = new Expression[ar];
		int i=0;
		if(ar>2 && Math.random()<.5*maxDepth/Expression.maxDepth){
			int u=r.nextInt(2), c=1-u;
			while(i<ar)	
				branch[i++]=(i==1)?new Leaf(u):new If(new Leaf[]{new Leaf(c),Leaf.data(i<3),Leaf.data(false)});
				
		}
		
		for( ;i<ar; i++){
			branch[i]= Expression.generateRandomTree(maxDepth-1, leafs);
		}
		
		Operator op= null;
		try {
			op = (Operator) wich.newInstance();
			op.rebuild(branch);
		} catch (Exception e) {
			System.out.println(e+" >> revisar Operator::generateRandomOp");
		}
		return op;
	}