Matriz de Indexação

Olá, tudo bem?

Estou sofrendo para pensar em uma maneira de resolver esta questão:

Desafio 1
Uma matriz de indexação zero A de tamanho N, contém todos os números inteiros
de 0 a N-1. Encontre e retorne o maior tamanho possível do conjunto S, onde S
[i] = {A [i], A [A [i]], A [A [A [i]], …} sujeito à regra abaixo.
Suponha que o primeiro elemento em S começa com a seleção do elemento A [i] do
índice = i, o próximo elemento em S deve ser A [A [i]], e depois A [A [A [i]]]… Por
essa analogia, deixamos de adicionar um novo elemento em S quanto este for
duplicado no conjunto.
Exemplo
Entrada: A = [5,4,0,3,1,6,2]
Saída: 6
Esclarecimento:
A[0] = 5, A[1] = 4, A[2] = 0, A[3] = 3, A[4] = 1, A[5] = 6, A[6] = 2.
Um dos maiores conjuntos de S[K] é:
S[0] = {A[0], A[5], A[6], A[2]} = {5, 6, 2, 0}
Obs:

  1. N é um número inteiro no intervalo [1, 20000].
  2. Todos os elementos de A são distintos.
  3. Cada elemento de A é um inteiro no intervalo [0, N-1].

Criei uma função que vai pegar o vetor digitado pelo usuário, de acordo com a quantidade de indexação que ele escolheu. Meu problema, é: Não estou conseguindo criar a lógica para pegar o vetor pela posição do resultado do vetor (conforme descrito na resolução S[0]). Alguem pode me ajudar?

int indice = 0; // começa com zero
int resultado[N]; // vetor resultado com tamanho N 
int qtdNoResultado = 0; // qtd de elementos no resultado, varia de 0 a N

Repita {
  Se indice >= qtdNoResultado {
    resultado[qtdNoResultado] = A[indice]; // adiciona novo elemento
    qtdNoResultado = qtdNoResultado + 1; // atualiza a qtd
    indice = A[indice]; // atualiza o indice
  } senão {
    retorna o vetor "resultado" com tamanho "qtdNoResultado"
  }
}