#include <bits/stdc++.h>
using namespace std;
inline char gc() {
  static char buf[100000], *p1 = buf, *p2 = buf;
  return p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 100000, stdin), p1 == p2)
             ? EOF
             : *p1++;
}
inline int read() {
  char c = getchar();
  int tot = 1;
  while ((c < '0' || c > '9') && c != '-') c = getchar();
  if (c == '-') {
    tot = -1;
    c = getchar();
  }
  int sum = 0;
  while (c >= '0' && c <= '9') {
    sum = sum * 10 + c - '0';
    c = getchar();
  }
  return sum * tot;
}
inline void wr(int x) {
  if (x < 0) {
    putchar('-');
    wr(-x);
    return;
  }
  if (x >= 10) wr(x / 10);
  putchar(x % 10 + '0');
}
inline void wrn(int x) {
  wr(x);
  putchar('\n');
}
inline void wri(int x) {
  wr(x);
  putchar(' ');
}
inline void wrn(int x, int y) {
  wri(x);
  wrn(y);
}
inline void wrn(int a, int b, int c) {
  wri(a);
  wrn(b, c);
}
int n, a[1000055], b[1000055];
long long s1, s2, S1 = 0, S2 = 0;
map<int, pair<int, int> > mp;
inline void print(int l, int r) {
  printf("%d\n", r - l);
  for (int i = l + 1; i <= r; ++i) printf("%d ", i);
  puts("");
}
inline void solve(int a[], int b[], bool f) {
  s1 = 0, s2 = 0, mp[0] = make_pair(0, 0);
  for (int i = 1, j = 0; i <= n; ++i) {
    s1 += a[i];
    while (j < n && s2 + b[j + 1] <= s1) s2 += b[++j];
    int delta = s1 - s2;
    if (mp.count(delta)) {
      if (!f)
        print(mp[delta].first, i), print(mp[delta].second, j);
      else
        print(mp[delta].second, j), print(mp[delta].first, i);
      return;
    }
    mp[delta] = make_pair(i, j);
  }
}
signed main() {
  n = read();
  for (int i = 1; i <= n; ++i) S1 += (a[i] = read());
  for (int i = 1; i <= n; ++i) S2 += (b[i] = read());
  if (s1 < s2)
    solve(a, b, 0);
  else
    solve(b, a, 1);
  return 0;
}
