JOI 君喜欢制作纸艺。今天,JOI 君也打算制作一件纸艺作品。 首先,JOI 君根据设计图在 1 张长方形的纸上打印了 $N$ 条切割线。每条切割线都是平行于纸张纵边或横边的线段。 切割后得到的每一部分都将作为作品中的某个零件使用。理所当然地,零件数量越多的作品制作起来越困难。JOI 君想知道,当按照所有切割线将纸张切开后,纸张会被分成多少个部分。
题目描述
给定纸张的大小和 $N$ 条切割线的信息。请编写一个程序,求出按照这些切割线将纸张切开后,纸张会被分成多少个部分。
输入格式
从标准输入读取以下数据:
- 第 1 行包含三个整数 $W, H, N$,以空格分隔。$W$ 表示纸张的横向边长,$H$ 表示纸张的纵向边长,$N$ 表示切割线的条数。纸张的左下角、右下角、左上角、右上角坐标分别表示为 $(0, 0), (W, 0), (0, H), (W, H)$。
- 接下来的 $N$ 行中,第 $i$ 行 ($1 \le i \le N$) 包含四个整数 $A_i, B_i, C_i, D_i$ ($0 \le A_i \le C_i \le W, 0 \le B_i \le D_i \le H$),以空格分隔。这表示第 $i$ 条切割线是连接 $(A_i, B_i)$ 和 $(C_i, D_i)$ 的线段。该线段平行于纸张的某条边。也就是说,$A_i = C_i$ 和 $B_i = D_i$ 中恰好有一个成立。此外,任意两条平行的切割线之间没有公共点,且任意切割线与平行的纸张边缘之间也没有公共点。
输出格式
将纸张被分成的部分数量作为一个整数,输出到标准输出中。
数据范围
所有输入数据满足以下条件:
- $1 \le W \le 1\,000\,000\,000$
- $1 \le H \le 1\,000\,000\,000$
- $1 \le N \le 100\,000$
子任务
子任务 1 [5 分] 满足以下条件: $W \le 1\,000$ $H \le 1\,000$ * $N \le 1\,000$
子任务 2 [5 分] 满足以下条件: * $N \le 1\,000$
子任务 3 [20 分] 具有公共点的不同两条切割线的组合数量不超过 $100\,000$。
子任务 4 [20 分] 从切割线上的任意一点出发,都可以沿着若干条切割线到达纸张的边缘。
子任务 5 [50 分] 没有额外限制。
样例
样例输入 1
10 10 5 6 0 6 7 0 6 7 6 2 3 9 3 2 3 2 10 1 9 8 9
样例输出 1
4
说明
对于该输入,切割线如下图所示:
因此,纸张被切割线分成了 4 个部分。注意,该输入满足子任务 4 的条件。
样例输入 2
13 7 28 1 1 4 1 1 1 1 3 2 2 3 2 2 2 2 3 1 3 2 3 3 2 3 6 4 1 4 6 3 6 4 6 5 1 8 1 5 1 5 6 6 2 7 2 6 2 6 5 7 2 7 5 6 5 7 5 8 1 8 6 5 6 8 6 9 1 12 1 9 1 9 2 9 2 10 2 12 1 12 2 11 2 12 2 10 2 10 5 9 5 10 5 9 5 9 6 11 2 11 5 11 5 12 5 12 5 12 6 9 6 12 6
样例输出 2
5
说明
对于该输入,切割线如下图所示:
因此,纸张被切割线分成了 5 个部分。注意,该输入不满足子任务 4 的条件。