//
// How many solutions are there to the equation
// x + y + z = 29 where x,y,z in [0..29]
//
// Prove result is correct.
//

import static choco.Choco.*;
import choco.cp.model.CPModel;
import choco.cp.solver.CPSolver;
import choco.kernel.model.Model;
import choco.kernel.solver.Solver;
import choco.kernel.solver.ContradictionException;
import choco.kernel.model.variables.integer.IntegerExpressionVariable;
import choco.kernel.model.variables.integer.IntegerVariable;
import choco.cp.solver.search.integer.varselector.StaticVarOrder;

public class MakeJob {

    static void display(int x, int y, int z){
	System.out.print("java Ramsey334_30b "+ x +" "+ y +" "+ z +" > results/");
	if (x<10) System.out.print("0"+ x +"-"); else System.out.print(x +"-");
	if (y<10) System.out.print("0"+ y +"-"); else System.out.print(y +"-");
	if (z<10) System.out.println("0"+ z +".txt"); else System.out.println(z +".txt");
    }
  
  public static void main(String[] args) {
     Model m                = new CPModel();
     int n                  = 29;
     int lwb                = Integer.parseInt(args[0]);
     int upb                = Integer.parseInt(args[1]);
     IntegerVariable[] vars = makeIntVarArray("",3,0,n);
     int k                  = 0;

     m.addConstraint(eq(sum(vars),29));
     m.addConstraint(leq(vars[0],vars[1]));

     Solver solver = new CPSolver();     
     solver.read(m);                       
     //s.solve(true);  
     solver.setVarIntSelector(new StaticVarOrder(solver.getVar(vars)));

     if (solver.solve().booleanValue()){
	 if (lwb <= k && k <= upb) display(solver.getVar(vars[0]).getVal(),solver.getVar(vars[1]).getVal(),solver.getVar(vars[2]).getVal());
	 k++;
	 while (solver.nextSolution().booleanValue()){
	     if (lwb <= k && k <= upb) display(solver.getVar(vars[0]).getVal(),solver.getVar(vars[1]).getVal(),solver.getVar(vars[2]).getVal());
	     k++;
	 }
     }
     //System.out.println("feasible: " + solver.isFeasible());
     //System.out.println("nbSol: " + solver.getNbSolutions());
  }
}