/**
* Created by Frans on 11.10.2015.
*/
public class Bitti {
static int[] jono;
static int[] poisto;
static int pituus;
static int poistoPituus;
static String vastaus;
static boolean possibleWhole;
static int sarjaTaulukko[];
static int lyhytBitti;
public static void main(String[] args) {
IO io = new IO();
final char[] line = io.next().toCharArray();
int length = line.length;
jono = new int[length+1];
//poisto = new int[length+10];
int vanha = 0;
int vanhaTmp = 0;
pituus = 0;
poistoPituus = 0;
vastaus = "";
String vastaus2 = "";
possibleWhole = true;
boolean poistettu = false;
int[][] yksinainen = {{0,0},{0,0}};
int[] yksinainenMaara = {0,0};
int[][] yksinainenLyhytBitti = {{0,0},{0,0}};
lyhytBitti =0;
sarjaTaulukko = new int[length+1];
stillPossible:
{
for (int i = 1; i <= length; i++) {
int tmpNyt = (int) (line[i - 1]) - 48; // 0 tai 1
int nyt = tmpNyt * 2 - 1; // -1,-2 tai 1,2
if (nyt + vanha == 2 || nyt + vanha == -2) {
jono[pituus] = nyt * 2;
} else {
//yksinainen loydetty
if (jono[pituus]*jono[pituus] == 1){
lyhytBitti ++;
sarjaTaulukko[pituus] = pituus-lyhytBitti;
int yksNyt = 1 - tmpNyt; //vastakkainen kuin nyt
yksinainen[yksNyt][yksinainenMaara[yksNyt]]=pituus+1;
yksinainenMaara[yksNyt] ++;
if (yksinainenMaara[yksNyt] == 2){
if (!valiRatkaisu(yksinainen[yksNyt][0], (pituus-1))) {
possibleWhole = false;
break stillPossible;
}
jono[pituus -1] = jono[pituus - 1] * 2;
pituus = pituus - 1;
yksinainenMaara[yksNyt] = 0;
lyhytBitti = pituus-sarjaTaulukko[yksinainen[yksNyt][0]-1]-1;
//jos yksinainen oli loydetty poistetusta alueesta
if (yksinainen[tmpNyt][0]>=yksinainen[yksNyt][0]){
yksinainenMaara[tmpNyt] = 0;
}
}
}
pituus++;
jono[pituus] = nyt;
}
/*
if (pituus >= 3) {
//lyhmmin patkan poisto
if (jono[pituus - 2] + jono[pituus - 1] + jono[pituus] == 0) { // 1, -2, 1 or -1, 2, -1
poistoPituus++;
vastaus = vastaus + (pituus - 1) + " ";
jono[pituus - 2] = jono[pituus - 2] * 2;
pituus = pituus - 2;
poistettu = true;
}
}
*/
vanha = nyt;
vanhaTmp = tmpNyt;
sarjaTaulukko[pituus] = pituus-lyhytBitti;
}
//silmukan viimeinen lasketaan yksinaiseksi, jos on pariton maara
if (yksinainenMaara[vanhaTmp]==1){
if (!valiRatkaisu(yksinainen[vanhaTmp][0], (pituus-1))) {
possibleWhole = false;
break stillPossible;
}
jono[pituus -1] = jono[pituus - 1] * 2;
pituus = pituus - 1;
lyhytBitti = pituus-sarjaTaulukko[yksinainen[vanhaTmp][0]-1]-1;
}
possibleWhole = valiRatkaisu(1, pituus);
}
if (possibleWhole){
io.println(poistoPituus);
io.println(vastaus);
}else{
io.println("QAQ");
}
//io.println(line);
io.close();
}
private static boolean valiRatkaisu(int start, int end){
int length = end-start+1;
int[] valiJono = new int[length+1];
System.arraycopy(jono,start,valiJono,1,length);
System.arraycopy(jono,end+1,jono,start,pituus-end);
pituus -= length;
int poistetutSarjat = 0;
boolean possible = true;
for(int i=3; i<=length; i++){
int a = Math.abs(valiJono[i-1]);
int b = Math.abs(valiJono[i]+valiJono[i-2]);
if (Math.abs(valiJono[i-1])==2 && Math.abs(valiJono[i]+valiJono[i-2])==3 ){ // 1, -2, 2 or -2, 2, -1
poistoPituus ++;
vastaus = vastaus +(sarjaTaulukko[start+i-2-poistetutSarjat])+ " ";
System.arraycopy(valiJono,i+1,valiJono,i-1,length-i);
valiJono[i-2] = -valiJono[i-1]; //muutetaan se arvoksi 2
//valiJono[length-2] = valiJono[length-2] * 2;
i = i -2;
length = length -2;
poistetutSarjat ++;
}
}
for (int i=1; i<=length; i++){
if(Math.abs(valiJono[i]) == 1){ //yksinäinen 1 jäljellä
possible = false;
break;
}else{
poistoPituus ++;
vastaus = vastaus +(sarjaTaulukko[start-1]+1)+ " ";
}
}
return possible;
}
}