/*String printtree()
    {
        treenode nod=superstrategy;
        // print out the tree in DOT format
        String st="digraph G {\n";
        
        if(nod.variable!=-1 && nod.subtrees!=null)
        {
            for(int i=0; i<nod.subtrees.length; i++)
                st+=printtree(nod.subtrees[i], 0, i);
            nod.nodenumber=0;
            
            st+="0 [label="+variables[nod.variable].name+"];\n";
        }
        
        // now print the cross-connections.
        
        for(int var=1; var<variables.length; var++)
        {
            if(!variables[var].quant)
            {
                for(int val=0; val<variables[var].domsize(); val++)
                {
                    st+=nodenumber+" [label=\""+variables[var].name+"="+val+"\"];\n";
                    supports[var][val].nodenumber=nodenumber;
                    if(supports[var][val].right!=null)
                        st+=supports[var][val].nodenumber+" -> "+supports[var][val].right.nodenumber+" [taillabel=right];\n";
                    
                    nodenumber++;
                    
                    st+=printtree2(superstrategy, var, val);
                }
            }
        }
        
        st+="}";
        nodenumber=1;
        
        return st;
    }
    
    String printtree(treenode node, int connectedfrom, int edgelabel)
    {
        String st="";
        if(node!=null)
        {
            if(node.leaf)
            {
                st+=connectedfrom+" -> "+nodenumber+" [taillabel="+edgelabel+"];\n";
                st+=nodenumber+" [label=true];\n";
                node.nodenumber=nodenumber;
                nodenumber++;
            }
            else if(node.variable!=-1 && node.subtrees!=null)
            {
                st+=connectedfrom+" -> "+nodenumber+" [taillabel="+edgelabel+"];\n";
                st+=nodenumber+" [label="+variables[node.variable].name+"];\n";
                node.nodenumber=nodenumber;
                
                int newconfrom=nodenumber;
                nodenumber++;
                
                for(int i=0; i<node.subtrees.length; i++)
                {
                    st+=printtree(node.subtrees[i], newconfrom, i);
                }
            }
        }
        return st;
    }
    
    String printtree2(treenode node, int var, int val)
    {
        String st="";
        if(node.variable<var)
        {
            for(int i=0; i<variables[var].domsize(); i++)
            {
                if(node.subtrees[i]!=null)
                {
                    st+=printtree2(node.subtrees[i], var, val);
                }
            }
        }
        else
        {
            assert node.variable==var;
            treenode curnode=node.subtrees[val];
            
            if(curnode!=null)
            {
                if(curnode.left!=null) st+=curnode.nodenumber+" -> "+curnode.left.nodenumber+" [taillabel=left];\n";
                if(curnode.right!=null) st+=curnode.nodenumber+" -> "+curnode.right.nodenumber+" [taillabel=right];\n";
            }
        }
        return st;
    }*/
