from enum import Enum, auto from collections import defaultdict from itertools import product def to_list(cons_cell: tuple) -> list: if len(cons_cell) == 0: return [] res = [] x = cons_cell while x is not None: a, x = x res.append(a) return res class E(Enum): EAT = auto() NOT_EAT = auto() INF = 1 << 62 N = int(input()) V = list(map(int, input().split())) def is_valid(prev_state, curr_state) -> bool: if prev_state == E.EAT and curr_state == E.EAT: return False return True def recur_dp(p, dp): if p == N: ma = max(dp.values()) for s in [E.EAT, E.NOT_EAT]: if dp[s] == ma: print(ma) return s, ma, None assert False pp = defaultdict(lambda: -INF) dp, pp = pp, dp for fm, to in product([E.EAT, E.NOT_EAT], [E.EAT, E.NOT_EAT]): if pp[fm] == -INF: continue if not is_valid(fm, to): continue val = pp[fm] + V[p] if to == E.EAT else pp[fm] dp[to] = max(dp[to], val) next_state, max_v, path = recur_dp(p+1, dp) # 復元 for fm, to in product([E.EAT, E.NOT_EAT], [E.EAT, E.NOT_EAT]): if not is_valid(fm, to): continue if to == next_state: if to == E.EAT and pp[fm] + V[p] == max_v: return fm, pp[fm], (p, path) if to == E.NOT_EAT and pp[fm] == max_v: return fm, max_v, path assert False dp = defaultdict(lambda: -INF) dp[E.NOT_EAT] = 0 _, max_v, path = recur_dp(0, dp) print(*[x+1 for x in to_list(path)])