random() < 0.25 randRangeNonZero( -10, 10 ) randRangeNonZero( -10, 10 ) SQUARE ? A : randRangeNonZero( -10, 10 ) SQUARE ? B : randRangeNonZero( -10, 10 ) "x" "x^2" "\\left(" + plus( A+X, B ) + "\\right)" "\\left(" + plus( C+X, D ) + "\\right)"

`LEFT + ( SQUARE ? "^2" : RIGHT ) = \ ?`

`plus( (A*C)+XX, (A*D+B*C)+X, B*D )`

- `plus( (A+C)+XX, (A*D+B*C)+X, B*D )`
- `plus( (A*C)+XX, (A*D+B*C)+X, B+D )`
- `plus( (A+C)+XX, (A*D+B*C)+X, B+D )`
- `plus( (A+C)+XX, (A*D-B*C)+X, B*D )`
- `plus( (A*C)+XX, (A*D-B*C)+X, B+D )`
- `plus( (A+C)+XX, (A*D-B*C)+X, B+D )`
- `plus( (A+C)+XX, (A*B+C*D)+X, B*D )`
- `plus( (A*C)+XX, (A*B+C*D)+X, B+D )`
- `plus( (A+C)+XX, (A*B+C*D)+X, B+D )`
- `plus( (A+C)+XX, (A*B-C*D)+X, B*D )`
- `plus( (A*C)+XX, (A*B-C*D)+X, B+D )`
- `plus( (A+C)+XX, (A*B-C*D)+X, B+D )`

`= LEFT + RIGHT`

`= plus( mult( A+X, RIGHT ), mult( B, RIGHT ) )`

`= plus( parens( mult( A+X, C+X ) ), parens( mult( A+X, D ) ), parens( mult( B, C+X ) ), parens( mult( B, D ) ) )`

`= plus( (A*C)+XX, parens( mult( A+X, D ) ), parens( mult( B, C+X ) ), parens( mult( B, D ) ) )`

`= plus( (A*C)+XX, parens( plus( (A*D)+X, (B*C)+X ) ), parens( mult( B, D ) ) )`

`= plus( (A*C)+XX, (A*D+B*C)+X, parens( mult( B, D ) ) )`

`= plus( (A*C)+XX, (A*D+B*C)+X, B*D )`