import kotlin.random.Random fun main() { val N = readln().toInt() val (A, B) = buildList(N) { repeat(N) { val (a, b) = readln().split(' ').map { it.toLong() } add(Pair(a, b)) } }.unzip() var optimalQueries = listOf>() var minCost = 500_000_000_000_000_000L repeat(10000) { val copiedA = A.toMutableList() val copiedB = B.toMutableList() val queries = mutableListOf>() repeat(50) { val u = Random.nextInt(N) val v = Random.nextInt(N - 1).let { if (it < u) it else it + 1 } queries.add(Pair(u, v)) copiedA[u] = (copiedA[u] + copiedA[v]) / 2 copiedA[v] = copiedA[u] copiedB[u] = (copiedB[u] + copiedB[v]) / 2 copiedB[v] = copiedB[u] } val cost = Math.max(Math.abs(copiedA[0] - 500_000_000_000_000_000L), Math.abs(copiedB[0] - 500_000_000_000_000_000L)) if (cost < minCost) { optimalQueries = queries minCost = cost } } println(optimalQueries.size) println(optimalQueries.joinToString("\n") { (u, v) -> "${u + 1} ${v + 1}" }) }