```go
package main
import (
"bufio"
"fmt"
"os"
"strconv"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
scanner.Split(bufio.ScanWords)
scanner.Scan()
n, _ := strconv.Atoi(scanner.Text())
scanner.Scan()
k, _ := strconv.ParseInt(scanner.Text(), 10, 64)
a := make([]int, n+1)
for i := 1; i <= n; i++ {
scanner.Scan()
val, _ := strconv.Atoi(scanner.Text())
a[i] = val
}
next := make([]int, n+1)
for i := 1; i <= n; i++ {
next[a[i]] = i
}
visited := make([]bool, n+1)
result := make([]int, n+1)
for i := 1; i <= n; i++ {
if !visited[i] {
cycle := []int{}
cur := i
for !visited[cur] {
visited[cur] = true
cycle = append(cycle, cur)
cur = next[cur]
}
L := len(cycle)
shift := int(k % int64(L))
for idx, node := range cycle {
targetIdx := (idx + shift) % L
result[node] = cycle[targetIdx]
}
}
}
for i := 1; i <= n; i++ {
if i > 1 {
fmt.Print(" ")
}
fmt.Print(result[i])
}
fmt.Println()
}
```