← Home
package main

import (
	"bufio"
	"io"
	"os"
)

func main() {
	data, _ := io.ReadAll(os.Stdin)
	idx := 0
	nxt := func() int64 {
		n := len(data)
		for idx < n {
			c := data[idx]
			if c > ' ' {
				break
			}
			idx++
		}
		sign := int64(1)
		if idx < n && data[idx] == '-' {
			sign = -1
			idx++
		}
		val := int64(0)
		for idx < n {
			c := data[idx]
			if c < '0' || c > '9' {
				break
			}
			val = val*10 + int64(c-'0')
			idx++
		}
		return val * sign
	}

	n := int(nxt())
	m := int(nxt())
	k := int(nxt())

	rowTime := make([]int, n+1)
	rowColor := make([]int64, n+1)
	colTime := make([]int, m+1)
	colColor := make([]int64, m+1)

	for t := 1; t <= k; t++ {
		op := int(nxt())
		p := int(nxt())
		a := nxt()
		if op == 1 {
			rowTime[p] = t
			rowColor[p] = a
		} else {
			colTime[p] = t
			colColor[p] = a
		}
	}

	w := bufio.NewWriterSize(os.Stdout, 1<<20)
	defer w.Flush()

	writeInt := func(x int64) {
		if x == 0 {
			w.WriteByte('0')
			return
		}
		if x < 0 {
			w.WriteByte('-')
			x = -x
		}
		var buf [20]byte
		i := len(buf)
		for x > 0 {
			i--
			buf[i] = byte('0' + x%10)
			x /= 10
		}
		w.Write(buf[i:])
	}

	for i := 1; i <= n; i++ {
		for j := 1; j <= m; j++ {
			var v int64
			if rowTime[i] > colTime[j] {
				v = rowColor[i]
			} else {
				v = colColor[j]
			}
			writeInt(v)
			if j < m {
				w.WriteByte(' ')
			}
		}
		if i < n {
			w.WriteByte('\n')
		}
	}
}