fn main() { input!{ x: usize, y: usize, } println!("{} {}", x*y, x*y); // 輪っかを作る for i in 0..x { println!("{} {}", (i % x)+1, ((i+1) % x) + 1); } // 元の頂点から1本ずつ辺を生やす for j in 0..y-1 { for i in 0..x { println!("{} {}", 1+i + x*j, 1+i + x*(j+1)); } } } // const MOD17: usize = 1000000007; // const MOD93: usize = 998244353; // const INF: usize = 1 << 60; // let dx = vec![!0, 0, 1, 0]; // 上左下右 // let dy = vec![0, !0, 0, 1]; // 上左下右 // let d = vec!{(!0, 0), (0, !0), (1, 0), (0, 1)}; // 上左下右 #[allow(unused)] use proconio::{input, marker::Chars, marker::Usize1}; #[allow(unused)] use std::{ mem::swap, cmp::min, cmp::max, cmp::Reverse, collections::HashSet, collections::BTreeSet, collections::HashMap, collections::BTreeMap, collections::BinaryHeap, collections::VecDeque, iter::FromIterator, };