from sys import stdin
input=stdin.readline
def solv():
N = int(input())
graph = [0]+list(map(int,input().split()))
ginv = [[] for i in range(N+1)]
for i in range(1,N+1):
ginv[graph[i]].append(i)
ord=sorted(range(1,N+1),key=lambda x: len(ginv[x]))
visited = {ord[0]}
cur=[ord[0]]
while graph[cur[-1]] not in visited:
visited.add(graph[cur[-1]])
cur.append(graph[cur[-1]])
if len(cur) == N:
print(N-1)
rr=[0]*N
for i in range(N):
rr[cur[i]-1]=i+1
print(*rr)
return
tmp = [cur[0]]
while ginv[tmp[-1]] and ginv[tmp[-1]][-1] not in visited:
tmp.append(ginv[tmp[-1]].pop())
visited.add(tmp[-1])
res=tmp[:0:-1]+cur
r=len(res)-1
for start in ord:
if start in visited:
continue
visited.add(start)
cur=[start]
while graph[cur[-1]] not in visited:
visited.add(graph[cur[-1]])
cur.append(graph[cur[-1]])
tmp = [cur[0]]
while ginv[tmp[-1]] and ginv[tmp[-1]][-1] not in visited:
tmp.append(ginv[tmp[-1]].pop())
visited.add(tmp[-1])
RES=tmp[:0:-1]+cur
r+=len(RES)-1
res += RES
print(r)
rr=[0]*N
for i in range(N):
rr[res[i]-1]=i+1
print(*rr)
solv()
| Subtask | Sum | Test | Verdict | Time | Memory | ||
|---|---|---|---|---|---|---|---|
| subtask1 | 0/0 | ||||||
| 1 | Accepted | 43ms | 19688 KiB | ||||
| 2 | Accepted | 79ms | 23724 KiB | ||||
| subtask2 | 5/5 | ||||||
| 3 | Accepted | 39ms | 19712 KiB | ||||
| 4 | Accepted | 43ms | 19848 KiB | ||||
| 5 | Accepted | 39ms | 19632 KiB | ||||
| 6 | Accepted | 43ms | 19640 KiB | ||||
| 7 | Accepted | 39ms | 19712 KiB | ||||
| subtask3 | 5/5 | ||||||
| 8 | Accepted | 39ms | 19920 KiB | ||||
| 9 | Accepted | 39ms | 19648 KiB | ||||
| 10 | Accepted | 46ms | 19652 KiB | ||||
| 11 | Accepted | 43ms | 19684 KiB | ||||
| 12 | Accepted | 39ms | 19888 KiB | ||||
| subtask4 | 5/5 | ||||||
| 13 | Accepted | 39ms | 19776 KiB | ||||
| 14 | Accepted | 48ms | 21080 KiB | ||||
| 15 | Accepted | 48ms | 21176 KiB | ||||
| 16 | Accepted | 43ms | 21444 KiB | ||||
| 17 | Accepted | 48ms | 21224 KiB | ||||
| subtask5 | 10/10 | ||||||
| 18 | Accepted | 43ms | 21064 KiB | ||||
| 19 | Accepted | 56ms | 21436 KiB | ||||
| 20 | Accepted | 57ms | 21416 KiB | ||||
| 21 | Accepted | 50ms | 21532 KiB | ||||
| 22 | Accepted | 61ms | 21480 KiB | ||||
| 23 | Accepted | 41ms | 21084 KiB | ||||
| 24 | Accepted | 41ms | 21068 KiB | ||||
| 25 | Accepted | 56ms | 21484 KiB | ||||
| 26 | Accepted | 74ms | 24492 KiB | ||||
| 27 | Accepted | 67ms | 24300 KiB | ||||
| subtask6 | 10/10 | ||||||
| 28 | Accepted | 57ms | 21656 KiB | ||||
| 29 | Accepted | 64ms | 22436 KiB | ||||
| 30 | Accepted | 64ms | 22440 KiB | ||||
| 31 | Accepted | 71ms | 22856 KiB | ||||
| 32 | Accepted | 64ms | 23268 KiB | ||||
| 33 | Accepted | 65ms | 23872 KiB | ||||
| 34 | Accepted | 76ms | 23892 KiB | ||||
| 35 | Accepted | 74ms | 24308 KiB | ||||
| 36 | Accepted | 65ms | 24220 KiB | ||||
| 37 | Accepted | 76ms | 24264 KiB | ||||
| subtask7 | 40/40 | ||||||
| 38 | Accepted | 50ms | 21480 KiB | ||||
| 39 | Accepted | 78ms | 23216 KiB | ||||
| 40 | Accepted | 75ms | 22924 KiB | ||||
| 41 | Accepted | 82ms | 23220 KiB | ||||
| 42 | Accepted | 75ms | 23184 KiB | ||||
| 43 | Accepted | 93ms | 23748 KiB | ||||
| 44 | Accepted | 90ms | 24284 KiB | ||||
| 45 | Accepted | 79ms | 24292 KiB | ||||
| 46 | Accepted | 79ms | 24296 KiB | ||||
| 47 | Accepted | 90ms | 23956 KiB | ||||
| 48 | Accepted | 89ms | 24036 KiB | ||||
| 49 | Accepted | 79ms | 24044 KiB | ||||
| 50 | Accepted | 93ms | 24380 KiB | ||||
| 51 | Accepted | 86ms | 24248 KiB | ||||
| 52 | Accepted | 89ms | 23924 KiB | ||||
| 53 | Accepted | 79ms | 24084 KiB | ||||
| 54 | Accepted | 93ms | 24296 KiB | ||||
| 55 | Accepted | 81ms | 23952 KiB | ||||
| 56 | Accepted | 82ms | 23956 KiB | ||||
| 57 | Accepted | 96ms | 23940 KiB | ||||