use proconio::input; use std::collections::HashSet; fn main() { input! { x: isize, y: isize, } let mut ans = vec![]; for i in 0..x { ans.push((i, (i - 1 + x) % x)); ans.push((i, (i + 1) % x)); } let mut number = x; for start in 0..x { ans.push((start, number)); number += 1; for _ in 0..y - 2 { ans.push((number - 1, number)); number += 1; } } let mut ans_set = HashSet::new(); for (u, v) in ans { ans_set.insert((u.min(v), u.max(v))); } println!("{} {}", x * y, ans_set.len()); for (u, v) in ans_set { println!("{} {}", u + 1, v + 1); } }