Try this. Invisible edges are to enforce order within rank. Double 5 -- 6 edge is to enforce arc, otherwise the edge would be straight. I tried it on viz-js.com. The alternation of above and below arcs heavily depends on order of edges. Since it's very sensitive, undocumented and probably prone to minor version change, I don't recommend it as production solution, the DOT engine is IMHO not suitable for such tasks. For one-shot documentation purposes it's sufficient and fulfills your specification.
graph G {
splines=splines;
node [shape=circle];
edge [constraint=false];
rankdir=LR;
1 -- 10;
3 -- 8;
2 -- 9;
1 -- 2 [style=invis, constraint=true];
2 -- 3 [style=invis, constraint=true];
3 -- 4 [style=invis, constraint=true];
4 -- 5 [style=invis, constraint=true];
5 -- 6 [style=invis];
4 -- 7;
5 -- 6 [constraint=true];
6 -- 7 [style=invis, constraint=true];
7 -- 8 [style=invis, constraint=true];
8 -- 9 [style=invis, constraint=true];
9 -- 10 [style=invis, constraint=true];
}
