#include<iostream> #include<cstdio> #include<string> #include<cstring> #include<algorithm> using namespace std; int n,a[500005],b[500005],fz[500005],fo[500005],ans; char cmd; int main(){ freopen("median.in","r",stdin); freopen("median.out","w",stdout); cin>>n; for(int i = 1;i <= n;i++){ scanf("%d",&a[i]); } for(int i = 3;i <= n;i++){ if(a[i-2] == 0 && a[i-1] == 1 && a[i] == 0) fz[i] = 1; if(a[i-1] == 1 && a[i] == 0 && fz[i-2]) fz[i] = max(fz[i],fz[i-2] + 1); ans = max(ans,fz[i]); if(a[i-2] == 1 && a[i-1] == 0 && a[i] == 1) fo[i] = 1; if(a[i-1] == 0 && a[i] == 1 && fo[i-2]) fo[i] = max(fo[i],fo[i-2] + 1); ans = max(ans,fo[i]); } cout<<ans<<endl; int cnt = n,st = 0,to0 = 0,to1 = 0,cl = 0,op = 0; while(cnt){ b[cnt] = a[cnt]; if((fz[cnt] && fo[cnt-1] == fz[cnt]) && !to0 && !to1 && !cl){ to0 = to1 = fz[cnt] + 1; st = 0; } if((fo[cnt] && fz[cnt-1] == fo[cnt]) && !to0 && !to1 && !cl){ to0 = to1 = fo[cnt] + 1; st = 1; } if((st == 1 && to1) || (!to0 && to1)){ b[cnt] = 1; to1--; }else if((st == 0 && to0) || (!to1 && to0)){ b[cnt] = 0; to0--; } if(fz[cnt] && fz[cnt] == fo[cnt-1] + 1 && !cl && !to0 && !to1){ cl = fz[cnt]; op = 0; } if(fo[cnt] && fo[cnt] == fz[cnt-1] + 1 && !cl && !to0 && !to1){ cl = fo[cnt]; op = 1; } if(cl && op == 1 && a[cnt] == 0){ cl--; b[cnt] = 1; }else if(cl && op == 0 && a[cnt] == 1){ cl--; b[cnt] = 0; } cnt--; } for(int i = 1;i <= n;i++) printf("%d ",b[i]); return 0; } #include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<vector> #include<queue> #include<map> #include<set> #include<stack> #include<cstdlib> #include<string> #include<bitset> #define INF 1000000000 #define N 500005 #define fi first #define se second #define debug(x) cout<<#x<<"="<<x<<endl #define MP(x,y) make_pair(x,y) using namespace std; typedef long long LL; typedef pair<int,int> pii; int a[N]; int main() { int ans=0,i,n,cnt,l,r; freopen("median.in","r",stdin); freopen("median.out","w",stdout); cin>>n; for(i=1;i<=n;i++) { scanf("%d",&a[i]); } cnt=0; a[0]=a[1]; a[n+1]=a[n]; n++; for(i=1;i<=n;i++) { //debug(cnt); if(a[i]!=a[i-1]) cnt++; else { ans=max(ans,cnt/2); if(cnt>=2) { if(cnt%2==0) for(r=i;r>=i-cnt;r--) a[r]=a[i]; else { l=i-cnt-2; r=i; for(;r>l;r--,l++) a[r]=a[i],a[l]=a[i-cnt-2]; } } cnt=0; } } //ans=max(ans,cnt/2); cout<<ans<<endl; for(i=1;i<=n-1;i++) printf("%d ",a[i]); return 0; } // davidlee1999WTK 2015/ // srO myk Orz //ios::sync_with_stdio(false); //#pragma comment(linker, "/STACK:102400000,102400000") //#define O2 __attribute__((optimize("-O2")))