class RecursiveLinearizingComposer extends RecursiveLinearizingComposerTree {

    public SimplePolynomialFunction compose( SimplePolynomialFunction inner ) {
        Preconditions.checkArgument(outerInputLength == inner.getOutputLength() , "Outer input length must equal inner output length" );
        List<SimplePolynomialFunction> pieces = evaluate( null , Arrays.asList( inner.getMonomials() ), Lists.newArrayList( inner.getMonomials() ), rowContributions( inner ) , indices( inner.getMonomials() ) );
        SimplePolynomialFunction result = null;
        for( SimplePolynomialFunction piece : pieces ) {
            if( result == null ) { 
                result = piece;
            } else {
                result = piece.xor( result );
            }
        }
        if( constantContribution!=null ) {
            result = result.xor( getConstantFunction( inner.getInputLength() ) );
        }
        return result;
    }

    public  RecursiveLinearizingComposer(SimplePolynomialFunction outer );

}