#include<bits/stdc++.h>
struct Str
{
int w;
int num;
};
int n;
int a[1010], b[1010];
Str s[5000];
int u, v;
int ans[1010];
bool cmp(Str x, Str y)
{
return x.w < y.w;
}
int main(void)
{
scanf("%d", &n);
for(int k = 1;k <= n;k ++) scanf("%d", &a[k]);
for(int k = 1;k <= n;k ++) scanf("%d", &b[k]);
//读入
for(int k = 1;k <= n;k ++)
s[k].w = std::min(a[k], b[k]), s[k].num = k;
std :: sort(s+1, s+n+1, cmp);
//结构体存储,s[k].w表示用的时间. s[k].num 表示其序号
u = 0, v = n+1;
for(int k = 1;k <= n;k ++)
if(s[k].w == a[s[k].num])
ans[++ u] = s[k].num;
else
ans[-- v] = s[k].num;
//核心代码。也是我们刚刚讨论的算法的关键所在
//ans数组存放的就是我们的最终处理序列
u = 0, v = 0;
for(int k = 1;k <= n;k ++)
{
u += a[ans[k]];
if(v < u) v = u;
v += b[ans[k]];
}
//统计用时.这里u表示a机器用时,v表示b机器用时,且每次v都被置为最大值.
printf("%d\n", v);
for(int k = 1;k <= n;k ++) printf("%d ", ans[k]);
//输出
return 0;
}