package main import . "fmt" const ALPHA = 5 func dist(a,b []int, i int, c,d []int, j int) int { dx := a[i] - c[j] dy := b[i] - d[j] return dx*dx + dy*dy } func main() { var n, m int Scan(&n, &m) a := make([]int, n) b := make([]int, n) for i := range a { Scan(&a[i],&b[i]) } c := make([]int, m) d := make([]int, m) for i := range c { c[i] = (i%3+1)*250 d[i] = (i/3+1)*250 } t := []int{1} r := []int{1} for i := 0; i < n; i++ { next := (i+1)%n best := ALPHA*ALPHA*dist(a,b,i,a,b,next) st1 := -1 st2 := -1 for j := 0; j < m; j++ { tmp := ALPHA*dist(a,b,i,c,d,j) + ALPHA*dist(c,d,j,a,b,next) if tmp < best { best = tmp st1 = j st2 = -1 } } for j := 0; j < m; j++ { for k := 0; k < m; k++ { if j == k { continue } tmp := ALPHA*dist(a,b,i,c,d,j) + dist(c,d,j,c,d,k) + ALPHA*dist(c,d,k,a,b,i) if tmp < best { best = tmp st1 = j st2 = k } } } if st1 < 0 { t = append(t, 1) r = append(r, next+1) } else if st2 < 0 { t = append(t, 2, 1) r = append(r, st1+1, next+1) } else { t = append(t, 2, 2, 1) r = append(r, st1+1, st2+1, next+1) } } for i := range c { Println(c[i], d[i]) } Println(len(t)) for i := range t { Println(t[i], r[i]) } }