#include<iostream>
#include<map>
#include<set>
#include<algorithm>
using namespace std;
const int N = 1e7+10;
map<int,bool>vis;
set<int>b;
int n,a[N],c[N];
int main() {
scanf("%d",&n);
for(int i = 1; i <= n; i++) {
scanf("%d",a+i);
}
int ans = 0;
for(int i = 1; i <= n; i++) {
if(vis[a[i]]) {//判断是否出现1,1,……-1的情况
printf("-1\n");
return 0;
}
vis[a[i]] = true;//标记出现
if(a[i] > 0) {//只插入正数
b.insert(a[i]);
} else {//如果为负数
auto it = b.find(-a[i]);//找他的相反数位置
if(it == b.end()) {//如果没有出现过
printf("-1\n");
return 0;
}
b.erase(it);//如果出现过,那么可以删除了
}
if(b.size() == 0 && vis.size()) {
c[ans++] = vis.size();
vis.clear();
}
}
if(b.size()) {//到最后如果没有删完,说明有多余的正数
printf("-1\n");
return 0;
}
if(ans == 0) {//不用拆分数组
printf("1\n%d\n",n);
} else {
printf("%d\n",ans);
for(int i = 0; i < ans; i++) {
printf("%d ",c[i]);
}
}
return 0;
}