Problem:
Score : 400 points

Problem Statement

We have a grid with H rows and W columns. At first, all cells were painted white.

Snuke painted N of these cells. The i-th ( 1 \leq i \leq N ) cell he painted is the cell at the a_i-th row and b_i-th column.

Compute the following:

For each integer j ( 0 \leq j \leq 9 ), how many subrectangles of size 3×3 of the grid contains exactly j black cells, after Snuke painted N cells?

Constraints

3 \leq H \leq 10^9

3 \leq W \leq 10^9

0 \leq N \leq min(10^5,H×W)

1 \leq a_i \leq H (1 \leq i \leq N)

1 \leq b_i \leq W (1 \leq i \leq N)

(a_i, b_i) \neq (a_j, b_j) (i \neq j)

Input

The input is given from Standard Input in the following format:

H W N
a_1 b_1
:
a_N b_N

Output

Print 10 lines.
The (j+1)-th ( 0 \leq j \leq 9 ) line should contain the number of the subrectangles of size 3×3 of the grid that contains exactly j black cells.

Sample Input 1

4 5 8
1 1
1 4
1 5
2 3
3 1
3 2
3 4
4 4

Sample Output 1

0
0
0
2
4
0
0
0
0
0

There are six subrectangles of size 3×3. Two of them contain three black cells each, and the remaining four contain four black cells each.

Sample Input 2

10 10 20
1 1
1 4
1 9
2 5
3 10
4 2
4 7
5 9
6 4
6 6
6 7
7 1
7 3
7 7
8 1
8 5
8 10
9 2
10 4
10 9

Sample Output 2

4
26
22
10
2
0
0
0
0
0

Sample Input 3

1000000000 1000000000 0

Sample Output 3

999999996000000004
0
0
0
0
0
0
0
0
0

Solution in Kotlin (1.3.71) (judge verdict: Wrong Answer)

import kotlin.*

fun main(args: Array<String>) {
    Program().solve()
}

class Program {
    fun solve() {
        val sc = MyScanner()
        val h = sc.nextInt()
        val w = sc.nextInt()

        val n = sc.nextInt()
        val ab = Array(n) { sc.nextInt() to sc.nextInt() }

        val dx = arrayOf(-1, -1, -1, 0, 0, 0, 1, 1, 1)
        val dy = arrayOf(-1, 0, 1, -1, 0, 1, -1, 0, 1)

        val ls = mutableListOf<Pair<Int, Int>>()
        for (i in 0 until n) {
            for (j in 0 until 9) {
                val aa = ab[i].first + dy[j]
                val bb = ab[i].second + dx[j]
                if (aa <= 1 || aa >= h) continue
                if (bb <= 1 || bb >= w) continue
                val pair = aa to bb
                ls.add(pair)
            }
        }

        ls.sortWith(compareBy({ it.first }, { it.second }))

        val ans = Array(10) { 0L }
        var zero = (h - 2L) * (w - 2L)
        var cnt = 1
        for (i in 1 until ls.size) {
            if (ls[i - 1] != ls[i]) {
                ans[cnt]++
                cnt = 0
                zero--
            }
            cnt++
        }
        ans[cnt]++
        zero--
        ans[0] = zero
        println(ans.joinToString("\n"))

    }
}

class MyScanner {
    private var ptr = 0
    private var l = listOf<String>()

    fun next(): String {
        if (ptr >= l.size) {
            var s: String
            do {
                s = readLine()!!
            } while (s.isEmpty())
            l = s.split(' ')
            ptr = 0
        }
        return l[ptr++]
    }

    fun nextInt() = next().toInt()
    fun nextLong() = next().toLong()
    fun nextDouble() = next().toDouble()
    fun nextCharArray() = next().toCharArray()
    fun nextChar() = next()[0]

    fun list(): List<String> {
        ptr = l.size
        val s = readLine()!!
        return if (s.isEmpty()) listOf() else s.split(' ')
    }

    fun intList() = list().map { s -> s.toInt() }
    fun longList() = list().map { s -> s.toLong() }
    fun doubleList() = list().map { s -> s.toDouble() }

    fun array() = list().toTypedArray()
    fun intArray() = intList().toIntArray()
    fun longArray() = longList().toLongArray()
    fun doubleArray() = doubleList().toDoubleArray()
}