@kelvin, @spmal the Adjacent two edge dedup may seems easy(also g.V(44).outE().store('e').inV().inE().where(without('e')).count() the e is global variable and take effects for all paths).
Let's think a general problem: if we need to print all the path, and need each path have many edges and vertexs, we just need to make sure the edges in the path not dedup, but not restrict the vertexs, how to fullfill it. Last night I think a way as Following:
The edge dedup solution:
gremlin> g.withSack {['~~']}{it.clone()}.V(1).repeat(bothE().as("e").filter(__.sack().as("list").select("e").where(without("list"))).sack{m,v -> m += v; m}.otherV()).times(2).path()
==>[v[1],e[9][1-created->3],v[3],e[11][4-created->3],v[4]]
==>[v[1],e[9][1-created->3],v[3],e[12][6-created->3],v[6]]
==>[v[1],e[8][1-knows->4],v[4],e[10][4-created->5],v[5]]
==>[v[1],e[8][1-knows->4],v[4],e[11][4-created->3],v[3]]
==>[v[1],e[8][1-knows->4],v[4],e[0][5-fake->4],v[5]]
The edge may dedup solution for contrast:
gremlin> g.withSack {['~~']}{it.clone()}.V(1).repeat(bothE().as("e").sack{m,v -> m += v; m}.otherV()).times(2).path()
==>[v[1],e[9][1-created->3],v[3],e[9][1-created->3],v[1]]
==>[v[1],e[9][1-created->3],v[3],e[11][4-created->3],v[4]]
==>[v[1],e[9][1-created->3],v[3],e[12][6-created->3],v[6]]
==>[v[1],e[7][1-knows->2],v[2],e[7][1-knows->2],v[1]]
==>[v[1],e[8][1-knows->4],v[4],e[10][4-created->5],v[5]]
==>[v[1],e[8][1-knows->4],v[4],e[11][4-created->3],v[3]]
==>[v[1],e[8][1-knows->4],v[4],e[0][5-fake->4],v[5]]
==>[v[1],e[8][1-knows->4],v[4],e[8][1-knows->4],v[1]