#include #include const int N = 20; struct Task { int s, p, idx; bool operator< (const Task &t) const { return p > t.p || p == t.p && s > t.s; } } tasks[N]; int n; void input() { std::ifstream fin("input.txt"); fin >> n; for (int i = 0; i < n; ++i) { fin >> tasks[i].s >> tasks[i].p; tasks[i].idx = i + 1; } } int check_order() { int serv = 0, proc1 = 0, proc2 = 0; for (size_t i = 0; i < n; ++i) { serv = std::max(serv, proc1) + tasks[i].s; proc1 = serv + tasks[i].p; if (proc1 > proc2) { std::swap(proc1, proc2); } } return proc2; } void solve() { std::ofstream fout("output.txt"); std::sort(tasks, tasks + n); fout << check_order() << std::endl; for (size_t i = 0; i < n; ++i) { fout << tasks[i].idx << " "; } } int main() { input(); solve(); return 0; }