using
System;
using
System.Collections.Generic;
class
GFG{
static
void
solve(
int
[] arr,
int
n)
{
HashSet<
int
> unfilled_indices =
new
HashSet<
int
>();
HashSet<
int
> missing =
new
HashSet<
int
>();
for
(
int
i = 1; i < n; i++)
{
missing.Add(i);
}
for
(
int
i = 1; i < n; i++)
{
if
(arr[i] == 0)
{
unfilled_indices.Add(i);
}
else
{
missing.Remove(arr[i]);
}
}
int
[] mi =
new
int
[missing.Count];
int
l = 0;
foreach
(
int
x
in
missing)
{
mi[l++] = x;
}
int
m = missing.Count;
foreach
(
int
it
in
unfilled_indices)
{
arr[it] = mi[m - 1];
m--;
}
int
pos = 0;
for
(
int
i = 1; i < n; i++)
{
if
(arr[i] == i)
{
pos = i;
}
}
if
(pos != 0)
{
for
(
int
i = 1; i < n; i++)
{
if
(pos != i)
{
if
(unfilled_indices.Contains(i))
{
int
x = arr[i];
arr[i] = pos;
arr[pos] = x;
break
;
}
}
}
}
printArray(arr, n);
}
static
void
printArray(
int
[] arr,
int
n)
{
for
(
int
i = 1; i < n; i++)
{
Console.Write(arr[i] +
" "
);
}
}
static
public
void
Main()
{
int
[] arr = { 0, 7, 4, 0, 3, 0, 5, 1 };
int
n = arr.Length;
solve(arr, n);
}
}