```go
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
reader := bufio.NewReader(os.Stdin)
var n, k int
if _, err := fmt.Fscan(reader, &n, &k); err != nil {
return
}
pos := make([][]int, n+1)
for i := 1; i <= n; i++ {
pos[i] = make([]int, 0, k)
}
for i := 1; i <= n*k; i++ {
var c int
fmt.Fscan(reader, &c)
pos[c] = append(pos[c], i)
}
L := (n + k - 2) / (k - 1)
E := make([]int, L)
idx := make([]int, n+1)
active := make([]bool, n+1)
for i := 1; i <= n; i++ {
active[i] = true
}
ansA := make([]int, n+1)
ansB := make([]int, n+1)
count := n
for count > 0 {
minB := 1000000000
bestC := -1
for c := 1; c <= n; c++ {
if active[c] {
b := pos[c][idx[c]+1]
if b < minB {
minB = b
bestC = c
}
}
}
a := pos[bestC][idx[bestC]]
bestJ := -1
maxE := -1
for j := 0; j < L; j++ {
if E[j] < a && E[j] > maxE {
maxE = E[j]
bestJ = j
}
}
if bestJ != -1 {
ansA[bestC] = a
ansB[bestC] = minB
E[bestJ] = minB
active[bestC] = false
count--
} else {
idx[bestC]++
}
}
writer := bufio.NewWriter(os.Stdout)
for i := 1; i <= n; i++ {
fmt.Fprintf(writer, "%d %d\n", ansA[i], ansB[i])
}
writer.Flush()
}
```