#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;
}