#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<iostream>
#include<vector>
#include<set>
#include<map>
#include<string>
#include<algorithm>
#define FOR(i,a,b) for(i=(a);i<=(b);i++)
#define ROF(i,a,b) for(i=(a);i>=(b);i--)
#define pb push_back
#define mp make_pair
#define N 100010
using namespace std;
typedef long long LL;
typedef long double LD;
struct dat
{
int p,v,P;
bool operator<(const dat &A)const
{
if (p>A.p) return 1;
if (p<A.p) return 0;
if (v>A.v) return 1;
return 0;
}
bool operator==(const dat &A)const
{
return p==A.p&&v==A.v;
}
}a[N],t[N];
int bto[N],prize[N],ans[N],pos[N],l;
int main()
{
ios::sync_with_stdio(false);
int n,i;
scanf("%d",&n);
FOR(i,1,n) {scanf("%d",&a[i].p);a[i].P=i;}
FOR(i,1,n) scanf("%d",&a[i].v);
sort(a+1,a+1+n);
a[0].v=a[0].p=-1e9;
FOR(i,1,n) pos[a[i].P]=i;
l=0;
FOR(i,1,n)
if (a[i]==a[i-1])
{
bto[i]=bto[i-1];
}else {t[++l]=a[i];bto[i]=l;}
int cp=1,p2;
double ti=0;
prize[1]=1;
FOR(i,2,n) if (t[i].p==t[1].p) prize[i]=1;
while (1)
{
int np=-1;double MT=1e9;
FOR(i,1,l)
if (i!=cp&&t[i].v>t[cp].v)
{
double dis=t[cp].v*ti+t[cp].p-t[i].v*ti-t[i].p;
if (dis/(t[i].v-t[cp].v)<MT) {MT=dis/(t[i].v-t[cp].v);np=i;}
}
ti+=MT;
prize[np]=1;
if (np==-1) break;
cp=np;
}
int al=0;
FOR(i,1,n)
if (prize[bto[pos[i]]]) ans[++al]=i;
printf("%d\n",al);
FOR(i,1,al-1) printf("%d ",ans[i]);
printf("%d\n",ans[al]);
return 0;
}