#include <bits/stdc++.h>
#pragma GCC optimize("O3")
const double PI = acos(-1);
using namespace std;
const int MAX = 1000 * 1000 + 10;
int n;
long long SA[MAX], SB[MAX];
pair<int, int> A[MAX], B[MAX];
bool vis[MAX];
pair<int, int> M[MAX];
int main() {
  scanf("%d", &n);
  for (int i = 0; i < (n); i++)
    scanf("%d", &A[i + 1].first), A[i + 1].second = i + 1;
  for (int i = 0; i < (n); i++)
    scanf("%d", &B[i + 1].first), B[i + 1].second = i + 1;
  for (int i = 0; i < (n); i++) SA[i + 1] = A[i + 1].first + SA[i];
  for (int i = 0; i < (n); i++) SB[i + 1] = B[i + 1].first + SB[i];
  int j = 0;
  vector<int> out[2];
  for (int i = 0; i < (n + 1); i++) {
    while (j + 1 <= n && SB[j + 1] <= SA[i]) j++;
    long long diff = SA[i] - SB[j];
    assert(diff <= n);
    if (!vis[diff])
      M[diff] = make_pair(i, j), vis[diff] = 1;
    else {
      int sa = M[diff].first, sb = M[diff].second;
      for (++sa; sa <= i; sa++) out[0].push_back(A[sa].second);
      for (++sb; sb <= j; sb++) out[1].push_back(B[sb].second);
      break;
    }
  }
  if (out[0].empty())
    puts("-1");
  else {
    printf("%d\n", ((int)out[0].size()));
    for (int i = 0; i < (((int)out[0].size())); i++)
      printf("%d%c", out[0][i], " \n"[i + 1 == ((int)out[0].size())]);
    printf("%d\n", ((int)out[1].size()));
    for (int i = 0; i < (((int)out[1].size())); i++)
      printf("%d%c", out[1][i], " \n"[i + 1 == ((int)out[1].size())]);
  }
  return 0;
}
