N = int(input().strip()) x = [] for i in range(N): x.append(int(input().strip())) import numpy as np x = np.argsort(x) vis = [False] * len(x) cycles = [] curr = [] for i in range(N): if not vis[i]: vis[i] = True c = i curr.append(i) while x[c] != i: curr.append(x[c]) c = x[c] vis[c] = True cycles.append(curr) curr = [] r = max(len(c) - 1 for c in cycles) print(r) for i in range(r): xx = [] yy = [] for cyc in cycles: if len(cyc) > 1: xx.append(cyc[0]+1) yy.append(cyc.pop()+1) yy.reverse() res = xx + yy print(len(res)) print(' '.join((str(x) for x in res)))
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | N = int(input().strip()) x = [] for i in range(N): x.append(int(input().strip())) import numpy as np x = np.argsort(x) vis = [False] * len(x) cycles = [] curr = [] for i in range(N): if not vis[i]: vis[i] = True c = i curr.append(i) while x[c] != i: curr.append(x[c]) c = x[c] vis[c] = True cycles.append(curr) curr = [] r = max(len(c) - 1 for c in cycles) print(r) for i in range(r): xx = [] yy = [] for cyc in cycles: if len(cyc) > 1: xx.append(cyc[0]+1) yy.append(cyc.pop()+1) yy.reverse() res = xx + yy print(len(res)) print(' '.join((str(x) for x in res))) |