fork download
  1. F=lambda x:{J for K in x for J in K}
  2. L=len
  3. W=tuple
  4. def B(g):
  5. D={}
  6. for a,b in g:D[a]={*D.get(a,[]),b};D[b]={*D.get(b,[]),a}
  7. q,S=[(i,[i],[L(D[i])])for i in D if L(D[i])==1],{}
  8. for a,p,d in q:
  9. F=1;M=lambda t:[S[t]+[p],S[t]][p in S[t]or p[::-1]in S[t]]
  10. for A in D[a]-{*p}:q+=(A,p+[A],d+[L(D[A])]),;F=0
  11. if F:
  12. if(t:=W(d))in S:S[t]=M(t)
  13. elif(T:=W(d[::-1]))in S:S[T]=M(T)
  14. else:S[t]=[p]
  15. return S
  16. def f(g):
  17. d=B(g);C=0
  18. for i in d:
  19. V=[]
  20. for j in d[i]:r=[b for b in g if~-any(I in b for I in j)];V+=W(sorted([*B(r+[[u,u]for u in F(g)-F(r)-{*j}])])),
  21. C+=L({*V})
  22. return C
  23.  
  24. print(f([[1,2],[2,3],[3,4],[3,5]]))
  25. print(f([[1,2],[2,3],[3,4],[5,6],[6,7],[3,7],[7,8]]))
  26. print(f([[1,2],[2,3],[3,4],[3,5],[3,6],[3,7]]))
  27. print(f([[1,2],[2,3],[3,4],[3,5],[5,6],[6,7],[6,8],[6,9]]))
  28. print(f([[1,2],[2,3],[3,4],[4,5],[4,6],[7,8],[8,9],[6,9],[9,10]]))
  29. print(f([[1,2],[2,3],[3,4],[4,5],[4,6],[6,7],[4,8],[8,9],[9,10],[9,11],[11,12]]))
  30. print(f([[1, 2], [2, 3], [2, 4], [4, 5], [4, 6], [6, 7], [7, 8], [7, 9]]))
Success #stdin #stdout 0.13s 14144KB
stdin
Standard input is empty
stdout
2
4
2
4
6
10
5