← Home
package main

import (
	"bufio"
	"fmt"
	"os"
)

func abs(a int) int {
	if a < 0 {
		return -a
	}
	return a
}

type Dest struct {
	cx, cy, a int
}

type Car struct {
	x, y  int
	queue []Dest
}

func main() {
	in := bufio.NewReader(os.Stdin)
	out := bufio.NewWriter(os.Stdout)

	var w, h int
	fmt.Fscan(in, &w, &h)
	var k int
	fmt.Fscan(in, &k)

	cars := make([]Car, k)
	for i := 0; i < k; i++ {
		fmt.Fscan(in, &cars[i].x, &cars[i].y)
	}

	fmt.Fprintln(out, 0)
	out.Flush()

	t_prev := 0
	orderID := 1

	for {
		var t_j int
		fmt.Fscan(in, &t_j)
		if t_j == -1 {
			var dummy int
			for i := 0; i < 4; i++ {
				fmt.Fscan(in, &dummy)
			}
			fmt.Fprintln(out, 0)
			out.Flush()
			break
		}

		var sx, sy, tx, ty int
		fmt.Fscan(in, &sx, &sy, &tx, &ty)

		dt := t_j - t_prev
		for i := 0; i < k; i++ {
			rem := dt
			for len(cars[i].queue) > 0 {
				dest := cars[i].queue[0]
				dx := dest.cx - cars[i].x
				dy := dest.cy - cars[i].y
				dist := abs(dx) + abs(dy)

				if rem >= dist {
					rem -= dist
					cars[i].x = dest.cx
					cars[i].y = dest.cy
					cars[i].queue = cars[i].queue[1:]
				} else {
					if rem > 0 {
						if abs(dx) >= rem {
							if dx > 0 {
								cars[i].x += rem
							} else {
								cars[i].x -= rem
							}
							rem = 0
						} else {
							cars[i].x = dest.cx
							rem -= abs(dx)
							if dy > 0 {
								cars[i].y += rem
							} else {
								cars[i].y -= rem
							}
							rem = 0
						}
					}
					break
				}
			}
		}
		t_prev = t_j

		bestCar := -1
		minPickup := int(1e18)

		for i := 0; i < k; i++ {
			cx, cy := cars[i].x, cars[i].y
			time_spent := 0
			for _, dest := range cars[i].queue {
				time_spent += abs(cx-dest.cx) + abs(cy-dest.cy)
				cx = dest.cx
				cy = dest.cy
			}

			avail := t_j + time_spent
			distToPickup := abs(cx-sx) + abs(cy-sy)
			pickup := avail + distToPickup

			if pickup < minPickup {
				minPickup = pickup
				bestCar = i
			}
		}

		cars[bestCar].queue = append(cars[bestCar].queue, Dest{sx, sy, orderID}, Dest{tx, ty, -orderID})

		fmt.Fprintf(out, "1 %d %d", bestCar+1, len(cars[bestCar].queue))
		for _, dest := range cars[bestCar].queue {
			fmt.Fprintf(out, " %d %d %d", dest.cx, dest.cy, dest.a)
		}
		fmt.Fprintln(out)
		out.Flush()

		orderID++
	}
}