#include <bits/stdc++.h>
using namespace std;
inline char gch() {
  static char buf[100010], *h = buf, *t = buf;
  return h == t && (t = (h = buf) + fread(buf, 1, 100000, stdin), h == t)
             ? EOF
             : *h++;
}
template <typename inp_typ>
inline void re(inp_typ &x) {
  x = 0;
  char a;
  bool b = 0;
  while (!isdigit(a = getchar())) b = a == '-';
  while (isdigit(a)) x = x * 10 + a - '0', a = getchar();
  if (b == 1) x = -x;
}
const int ms = 1e6 + 10;
int n, lx;
long long sa[ms], sb[ms];
struct in {
  int x, y;
} pos[ms];
int main() {
  re(n);
  for (register int i = 1; i <= n; i++) re(sa[i]), sa[i] += sa[i - 1];
  for (register int i = 1; i <= n; i++) re(sb[i]), sb[i] += sb[i - 1];
  for (register int i = 0; i <= n; i++) pos[i] = (in){-1, -1};
  bool f = 0;
  if (sa[n] < sb[n]) swap(sa, sb), f = 1;
  register int i, ta = 0;
  long long v;
  for (i = 0; i <= n; i++) {
    while (sa[i] >= sb[ta + 1] && ta + 1 <= n) ta++;
    v = sa[i] - sb[ta];
    if (pos[v].x == -1)
      pos[v] = (in){i, ta};
    else
      break;
  }
  if (f) swap(sa, sb), swap(i, ta), swap(pos[v].x, pos[v].y);
  printf("%d\n", i - pos[v].x);
  for (register int j = pos[v].x + 1; j <= i; j++) printf("%d ", j);
  printf("\n");
  printf("%d\n", ta - pos[v].y);
  for (register int j = pos[v].y + 1; j <= ta; j++) printf("%d ", j);
}
