CF1179B Tolik and His Uncle

题目描述

今天早上,Tolik 意识到,在他睡觉的时候,他发明了一个非常棒的问题,非常适合放在 Codeforces 上!但是,由于“讨论题目”项目(英文版)还没有诞生,他决定先测试一下这个题目,并请教了他的叔叔。 Tolik 的叔叔思考了很久,还是没有想出解决方法。但他又不想让 Tolik 知道自己不会做,于是他决定向你请教如何解决这个问题。 在本题中,给定一个 $n \times m$ 的网格,由 $n$ 行 $m$ 列组成,其中点的坐标 $(x, y)$ 表示它位于第 $x$ 行第 $y$ 列(行列编号均从 $1$ 开始,$1 \leq x \leq n, 1 \leq y \leq m$)。你最初站在单元格 $(1, 1)$。每一步,你可以从当前所在的单元格 $(x, y)$ 跳到 $(x+dx, y+dy)$,其中 $(dx, dy)$ 是任意非零向量。显然,你不能跳出网格,并且还有一个重要条件——每个向量只能使用一次,不能重复。你的任务是恰好访问网格中的每一个单元格一次(初始单元格视为已访问)。 Tolik 的叔叔是一位非常受人尊敬的人。请你帮助他解决这个问题!

输入格式

输入仅一行,包含两个正整数 $n, m$($1 \leq n \cdot m \leq 10^{6}$),分别表示网格的行数和列数。

输出格式

如果无法恰好访问每个单元格一次,输出一行“-1”。 否则,输出 $n \cdot m$ 对整数,第 $i$ 对为 $x_i, y_i$($1 \leq x_i \leq n, 1 \leq y_i \leq m$),表示依次访问的单元格坐标,所有坐标均不重复,且每次跳跃所用的向量也不重复。 注意,根据题意,第一个单元格的坐标必须是 $(1, 1)$。

说明/提示

第一个样例中的跳跃向量依次为 $(0, 2), (0, -1), (1, 0), (0, 1), (0, -2)$。 由 ChatGPT 4.1 翻译