X, Y = gets.split.map(&:to_i) edges = [] n = X * Y d1 = [* 1 .. X] d2 = [* X + 1 .. X * (Y - 1)] d3 = [* X * (Y - 1) + 1 .. X * Y] # make a cycle X.times do |i| u = d3[i] v = d3[(i + 1) % X] edges << "#{u} #{v}" end # add arms arms = [] X.times do |i| arm = d2[(Y - 2) * i, Y - 2] edges << "#{arm[0]} #{d3[i]}" (1 ... Y - 2).each do |j| edges << "#{arm[j - 1]} #{arm[j]}" end edges << "#{arm[-1]} #{d1[i]}" end m = edges.size puts "#{n} #{m}" puts edges