n = 26 a = list("ABCDEFGHIJKLMNOPQRSTUVWXYZ") g = [[True]*n for i in range(n)] g[25][0] = False ans = [] # a-z の 26頂点間を、S=a,T=z で移動 (z-aだけ取り除く) def directed_euler_dfs(i,trail,n,g): for j in range(n): if g[i][j]: g[i][j] = False directed_euler_dfs(j,trail,n,g) trail.append(i) directed_euler_dfs(0,ans,n,g) ans.reverse() #print(g) for i in range(n*n-1): print(f"{a[ans[i]]}{a[ans[i+1]]}") print("ZA")