import choco.Problem;
import choco.Constraint;
import choco.Solver;
import choco.Solution;
import choco.ContradictionException;
import choco.integer.IntVar;
// import choco.search.AssignVar;
import choco.integer.search.MinDomain;
import choco.search.AbstractGlobalSearchSolver;
import choco.search.AbstractGlobalSearchLimit;
import java.io.*;
import java.lang.*;
import java.util.*;

public class RBuild {	
   

    public static void main(String[] args) throws Exception,ContradictionException,FileNotFoundException,IOException {
	long ms1 = System.currentTimeMillis();
	Dict d = new Dict();
	Tree t1 = new Tree(args[0],d);
	//System.out.println(t1);
	Tree t2 = new Tree(args[1],d);
	//System.out.println(t2);
	Problem pb = new Problem();
	int m = Math.max(t1.getMaxDDate(),t2.getMaxDDate());
	UMatrix um = new UMatrix(m,pb,d,false);	    

	t1.getRanks(um);
	t1.breakUp(um);	
	t2.getRanks(um);
	t2.breakUp(um);	
	
	boolean solved = true;
	try {pb.propagate();}
	catch (Exception e) {solved = false;}

	//Solver sol = pb.getSolver();
	//boolean solved = pb.solve(false);

	long ms2 = System.currentTimeMillis();

	if (solved){
	    Tree t3 = um.toTree();
	    System.out.println(t3);
	}
	else
	    System.out.println("();");

	System.out.println(ms2-ms1 + "ms");
    }

	
 }