def assert f unless f puts "Error!: Constraint Violation" exit end end n = gets.to_i assert(1 <= n && n <= 300000) pre_x = -1 pre_y = -1 dp = Hash.new(0) same = 0 n.times do x,y = gets.split.map(&:to_i) assert(1 <= x && x <= 10**9) assert(1 <= y && y <= 10**9) ndp = Hash.new(0) # xi, yi の順番に置くとき if x == pre_x ndp[y] = [dp[pre_x] + x, dp[pre_y]].max elsif x == pre_y ndp[y] = [dp[pre_y] + x, dp[pre_x]].max else ndp[y] = [dp[pre_x], dp[pre_y]].max end # yi, xi の順番に置くとき if y == pre_x ndp[x] = [dp[pre_x] + y, dp[pre_y]].max elsif y == pre_y ndp[x] = [dp[pre_y] + y, dp[pre_x]].max else ndp[x] = [dp[pre_x], dp[pre_y]].max end dp = ndp pre_x = x pre_y = y same += x if x == y end puts [dp[pre_x], dp[pre_y]].max + same