#include<bits/stdc++.h>usingnamespacestd;voidsolve(vector<int>&type,vector<int>&x){intn=x.size();vector<vector<int>>occ_index(n+1);vector<int>taken_count(n+1);vector<bool>picked(n);boolpossible=true;for(inti=0;i<n;i++){// Do a lazy pickup.
if(type[i]==1){occ_index[x[i]].push_back(i);}if(type[i]==2){vector<int>&occurrences=occ_index[x[i]];if(occurrences.empty()){possible=false;break;}intidx=occurrences.back();occurrences.pop_back();picked[idx]=true;// Add 1 to the range [idx, i]
taken_count[idx]+=1;taken_count[i+1]-=1;}}// Convert the difference array to a prefix sum array.
// This will retrieve the array after range queries.
for(inti=1;i<n;i++){taken_count[i]+=taken_count[i-1];}if(!possible){cout<<"-1"<<"\n";return;}intmx=-1;for(inti=0;i<n;i++){mx=max(mx,taken_count[i]);}cout<<mx<<"\n";for(inti=0;i<n;i++){if(type[i]==1){cout<<picked[i]<<" ";}}cout<<"\n";}intmain(){intn;cin>>n;vector<int>type(n),x(n);for(inti=0;i<n;i++){cin>>type[i]>>x[i];}solve(type,x);return0;}