I guess your "* the least complicated surface on which the graph can be embedded*" means the

**genus**of a graph.

**genus**of a graph is the minimal integer

*n*such that the graph can be drawn without crossing itself on a sphere with

*n*handles.

Here is what I refer to https://math.stackexchange.com/questions/1990107/relationship-between-crossing-number-genus-of-space

cr(G)≥g(G)

where cr(G) is the crossing number of G and g(G) is the

**genus**of G.

The crossing number of C3×Cn, the Cartesian product of the cycle C3 and Cn, is given by cr(C3×Cn)=n for n≥3 (see here) . On the other hand, it is easy to show that the genus of C3×Cn is given by g(C3×Cn)=1 for n≥3.

Currently, there are programs that calculate the upper and lower bounds of the cross numbers of graphs, but they are not written in Maple. http://crossings.uos.de/

@tomleslie First of all thank you for your help and effective code.

I have taken note of your remark:** it only works** when **all faces in the original graph have 3 (or fewer?) edges. **It seems to me that your code works for non-triangulated graph , as long as the graph is 3-connected.

An example of this is, I dual the dual graph in my instance.

Maybe I need to clarify two concepts briefly: *3***-connected graph and triangulating planar graphs. If you are not confused, ignore the following.**

*G*is said to be

*3*

**-vertex-connected**(or

*3-*

**connected**) if it has more than 3 vertices and remains connected whenever fewer than

*3*vertices are removed.

Any simple triangulating planar graph is 3-connected, and conversely it is not necessarily true. More interestingly 3-connected planar graphs have **unique embeddings in the sphere.**

@Carl Love Sorry, I didn’t make it clear. I mean to remove terms containing** a **and** exactly one other variable**. But I have to say that the answers you provide later are very beautiful and practical, and

**sometimes they will be used**.

**I hope you don’t delete it though they are a little bit different from what I meant here.**

We may think about it a little bit more. Now we just delete "ab", "ac" and “ad” and so on. I mean all the "a*x" forms that have "a" in them need to be deleted. Note that "x" stands for *exactly one* letter. For exampleï¼š

**f :=a*b*c*d+ a*b*c+a*b+a*c+a*d+a*e+2*a+a+b+c;**

s:=select(has, {op(f)}, a) minus {a*b,a*d,a*c,a*e};

s:=select(has, {op(f)}, a) minus {a*b,a*d,a*c,a*e};

s := {a*b*c, a*b*c*d, 3*a}

The above expression *f* is simple, so the above method can be done. But if there are many kinds of a* x in *f*, the codes may not be so neat.

@markweitzman Just as the link says, the **Risch algorithm** is a method of** indefinite integration** used in some computer algebra systems to find **antiderivatives**. In many cases, definite and indefinite integrals are not the same difficulty. You might think they're related because of the Newton-Leibniz formula. The following link is worth looking at, although the topic of discussion is Mathematica's integration problem.

https://mathematica.stackexchange.com/questions/204191/a-discontinuity-in-an-integral

@mmcdara Thank you, I learned a lot of skills from your codes, although the effect seems not so good in the new version according to your approach, as shown in the following picture.

Maybe we can change the code to do something like this, maybe it looks a little bit better.

@Carl Love The computer I have now only installed maple2020. It's late at night in my place, and I will run it on another computer with maple2021 installed as soon as possible tomorrow. maple2020 seems to be able to convert to latex and run your code well, but it is not displayed in the form of an array.