三子棋
题号:NC246823
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

给定一个 3 \times 3 的棋盘,共有 3 \times 3 = 9 个格点,初始时每个格点均没有放置棋子。

A 和 B 轮流行动,每次行动的人,必须在当前棋盘上选择一个没有放置棋子的格点,然后在该格点放置一个棋子。

若某棋手放置一个棋子后,该棋子与另外两个棋子(不论是谁放置的都可以)三点共线(水平、垂直、主副对角线均可),则该棋手获胜。

A 总是先手。若 A 将第一个棋子放置于格点 (x, y) 后,不论 B 如何落子,A 都能应对并最终获胜(假设 A,B 总是采取最优策略),则称这样的格点是 A 喜欢的。

请找到所有 A 喜欢的格点。。

下标从 1 开始,处在第 i 行、第 j 列的格点坐标为 (i, j)

输入描述:

本题无输入。

输出描述:

第一行输出一个整数 n ,表示 A 喜欢的格点有 n 个。

接下来输出 n 行,第 i 行两个正整数 x_i, y_i,以空格分格,表示第 i 个 A 喜欢的格点的坐标。

若有多个格点,x_i 小的先输出,若 x_i 相同,则 y_i 小的先输出。

例如,你认为 A 喜欢的格点是 (1, 3) 和 (2, 3) ,那么,你应该输出:

2
1 3
2 3
示例1

输入

复制
2 2

输出

复制
YES

备注:

解释:比如 A 可以将第一个格点置于 (2, 2) 处,即棋盘中心,那么无论下一个棋子 B 放在何处,A 都可以再落一子达成三点共线获胜。这样,(2, 2) 就是一个 A 喜欢的格点。