#pragma GCC optimize ("Ofast")
#include<bits/stdc++.h>
using namespace std;
template < class S> void arrErase( int k, int & sz, S a[ ] ) {
int i;
sz-- ;
for ( i= ( k) ; i< ( sz) ; i++ ) {
a[ i] = a[ i+ 1 ] ;
}
}
template < class S, class T> void arrErase( int k, int & sz, S a[ ] , T b[ ] ) {
int i;
sz-- ;
for ( i= ( k) ; i< ( sz) ; i++ ) {
a[ i] = a[ i+ 1 ] ;
}
for ( i= ( k) ; i< ( sz) ; i++ ) {
b[ i] = b[ i+ 1 ] ;
}
}
template < class S, class T, class U> void arrErase( int k, int & sz, S a[ ] , T b[ ] , U c[ ] ) {
int i;
sz-- ;
for ( i= ( k) ; i< ( sz) ; i++ ) {
a[ i] = a[ i+ 1 ] ;
}
for ( i= ( k) ; i< ( sz) ; i++ ) {
b[ i] = b[ i+ 1 ] ;
}
for ( i= ( k) ; i< ( sz) ; i++ ) {
c[ i] = c[ i+ 1 ] ;
}
}
#define main dummy_main
int main( ) {
return 0 ;
}
#undef main
class Solution{
public :
int numSteps( string s) {
int i;
int arr[ 502 ] ;
int N = s.size ( ) ;
int res = 0 ;
for ( i= ( 0 ) ; i< ( N) ; i++ ) {
arr[ i] = s[ N- 1 - i] - '0' ;
}
while ( N >= 2 ) {
res++ ;
if ( arr[ 0 ] == 0 ) {
arrErase( 0 , N, arr) ;
}
else {
arr[ 0 ] ++ ;
for ( i= ( 0 ) ; i< ( N- 1 ) ; i++ ) {
if ( arr[ i] == 2 ) {
arr[ i] = 0 ;
arr[ i+ 1 ] ++ ;
}
}
if ( arr[ N- 1 ] == 2 ) {
arr[ N- 1 ] = 0 ;
arr[ N] = 1 ;
N++ ;
}
}
}
return res;
}
}
;
// cLay varsion 20200408-1
// --- original code ---
// #define main dummy_main
// {}
// #undef main
//
// class Solution {
// public:
// int numSteps(string s) {
// int arr[502], N = s.size(), res = 0;
// rep(i,N) arr[i] = s[N-1-i] - '0';
// while(N >= 2){
// res++;
// if(arr[0]==0){
// arrErase(0, N, arr);
// } else {
// arr[0]++;
// rep(i,N-1) if(arr[i]==2) arr[i] = 0, arr[i+1]++;
// if(arr[N-1] == 2){
// arr[N-1] = 0;
// arr[N] = 1;
// N++;
// }
// }
// }
//
// return res;
// }
// };
I3ByYWdtYSBHQ0Mgb3B0aW1pemUgKCJPZmFzdCIpCiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnRlbXBsYXRlPGNsYXNzIFM+IHZvaWQgYXJyRXJhc2UoaW50IGssIGludCAmc3osIFMgYVtdKXsKICBpbnQgaTsKICBzei0tOwogIGZvcihpPShrKTtpPChzeik7aSsrKXsKICAgIGFbaV0gPSBhW2krMV07CiAgfQp9CnRlbXBsYXRlPGNsYXNzIFMsIGNsYXNzIFQ+IHZvaWQgYXJyRXJhc2UoaW50IGssIGludCAmc3osIFMgYVtdLCBUIGJbXSl7CiAgaW50IGk7CiAgc3otLTsKICBmb3IoaT0oayk7aTwoc3opO2krKyl7CiAgICBhW2ldID0gYVtpKzFdOwogIH0KICBmb3IoaT0oayk7aTwoc3opO2krKyl7CiAgICBiW2ldID0gYltpKzFdOwogIH0KfQp0ZW1wbGF0ZTxjbGFzcyBTLCBjbGFzcyBULCBjbGFzcyBVPiB2b2lkIGFyckVyYXNlKGludCBrLCBpbnQgJnN6LCBTIGFbXSwgVCBiW10sIFUgY1tdKXsKICBpbnQgaTsKICBzei0tOwogIGZvcihpPShrKTtpPChzeik7aSsrKXsKICAgIGFbaV0gPSBhW2krMV07CiAgfQogIGZvcihpPShrKTtpPChzeik7aSsrKXsKICAgIGJbaV0gPSBiW2krMV07CiAgfQogIGZvcihpPShrKTtpPChzeik7aSsrKXsKICAgIGNbaV0gPSBjW2krMV07CiAgfQp9CiNkZWZpbmUgbWFpbiBkdW1teV9tYWluCmludCBtYWluKCl7CiAgcmV0dXJuIDA7Cn0KI3VuZGVmIG1haW4KY2xhc3MgU29sdXRpb257CiAgcHVibGljOgogIGludCBudW1TdGVwcyhzdHJpbmcgcyl7CiAgICBpbnQgaTsKICAgIGludCBhcnJbNTAyXTsKICAgIGludCBOID0gcy5zaXplKCk7CiAgICBpbnQgcmVzID0gMDsKICAgIGZvcihpPSgwKTtpPChOKTtpKyspewogICAgICBhcnJbaV0gPSBzW04tMS1pXSAtICcwJzsKICAgIH0KICAgIHdoaWxlKE4gPj0gMil7CiAgICAgIHJlcysrOwogICAgICBpZihhcnJbMF09PTApewogICAgICAgIGFyckVyYXNlKDAsIE4sIGFycik7CiAgICAgIH0KICAgICAgZWxzZXsKICAgICAgICBhcnJbMF0rKzsKICAgICAgICBmb3IoaT0oMCk7aTwoTi0xKTtpKyspewogICAgICAgICAgaWYoYXJyW2ldPT0yKXsKICAgICAgICAgICAgYXJyW2ldID0gMDsKICAgICAgICAgICAgYXJyW2krMV0rKzsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYoYXJyW04tMV0gPT0gMil7CiAgICAgICAgICBhcnJbTi0xXSA9IDA7CiAgICAgICAgICBhcnJbTl0gPSAxOwogICAgICAgICAgTisrOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlczsKICB9Cn0KOwovLyBjTGF5IHZhcnNpb24gMjAyMDA0MDgtMQoKLy8gLS0tIG9yaWdpbmFsIGNvZGUgLS0tCi8vICNkZWZpbmUgbWFpbiBkdW1teV9tYWluCi8vIHt9Ci8vICN1bmRlZiBtYWluCi8vIAovLyBjbGFzcyBTb2x1dGlvbiB7Ci8vIHB1YmxpYzoKLy8gICBpbnQgbnVtU3RlcHMoc3RyaW5nIHMpIHsKLy8gICAgIGludCBhcnJbNTAyXSwgTiA9IHMuc2l6ZSgpLCByZXMgPSAwOwovLyAgICAgcmVwKGksTikgYXJyW2ldID0gc1tOLTEtaV0gLSAnMCc7Ci8vICAgICB3aGlsZShOID49IDIpewovLyAgICAgICByZXMrKzsKLy8gICAgICAgaWYoYXJyWzBdPT0wKXsKLy8gICAgICAgICBhcnJFcmFzZSgwLCBOLCBhcnIpOwovLyAgICAgICB9IGVsc2UgewovLyAgICAgICAgIGFyclswXSsrOwovLyAgICAgICAgIHJlcChpLE4tMSkgaWYoYXJyW2ldPT0yKSBhcnJbaV0gPSAwLCBhcnJbaSsxXSsrOwovLyAgICAgICAgIGlmKGFycltOLTFdID09IDIpewovLyAgICAgICAgICAgYXJyW04tMV0gPSAwOwovLyAgICAgICAgICAgYXJyW05dID0gMTsKLy8gICAgICAgICAgIE4rKzsKLy8gICAgICAgICB9Ci8vICAgICAgIH0KLy8gICAgIH0KLy8gCi8vICAgICByZXR1cm4gcmVzOwovLyAgIH0KLy8gfTsK