#include <bits/stdc++.h>
using namespace std;
int gi() {
  int res = 0, w = 1;
  char ch = getchar();
  while (ch != '-' && !isdigit(ch)) ch = getchar();
  if (ch == '-') w = -1, ch = getchar();
  while (isdigit(ch)) res = res * 10 + ch - '0', ch = getchar();
  return res * w;
}
const int MAX_N = 1e6 + 5;
int N, flag, a[MAX_N], b[MAX_N];
long long sa[MAX_N], sb[MAX_N];
pair<int, int> buc[MAX_N];
void print(int l, int r) {
  printf("%d\n", r - l + 1);
  for (int i = l; i <= r; i++) printf("%d ", i);
  putchar('\n');
}
int main() {
  N = gi();
  for (int i = 1; i <= N; i++) a[i] = gi(), sa[i] = sa[i - 1] + a[i];
  for (int i = 1; i <= N; i++) b[i] = gi(), sb[i] = sb[i - 1] + b[i];
  if (sa[N] > sb[N]) swap(a, b), swap(sa, sb), flag = 1;
  for (int i = 1, j = 1; i <= N; i++) {
    while (sa[i] > sb[j]) ++j;
    if (sa[i] == sb[j]) {
      if (flag)
        print(1, j), print(1, i);
      else
        print(1, i), print(i, j);
      return 0;
    }
    int v = sb[j] - sa[i];
    if (!buc[v].first)
      buc[v] = make_pair(i, j);
    else {
      if (flag)
        print(buc[v].second + 1, j), print(buc[v].first + 1, i);
      else
        print(buc[v].first + 1, i), print(buc[v].second + 1, j);
      return 0;
    }
  }
  puts("xgzc ak ioi");
  return 0;
}
