#include #include #include #include #include using namespace std; #define TYPE00 0 #define TYPE01 1 #define TYPE11 2 char number[1000005]; void simpleprint(int len) { for (int i = 0; i < len - 3; i++) { printf("%c", number[i]); } char c1 = number[len - 3]; char c2 = number[len - 2]; char c3 = number[len - 1]; if (c1 == '0' && c2 == '1' && c3 == '0') { printf("011\n"); } if (c1 == '0' && c2 == '1' && c3 == '1') { printf("000\n"); } if (c1 == '0' && c2 == '0' && c3 == '0') { printf("001\n"); } if (c1 == '0' && c2 == '0' && c3 == '1') { printf("110\n"); } if (c1 == '1' && c2 == '1' && c3 == '0') { printf("111\n"); } if (c1 == '1' && c2 == '1' && c3 == '1') { printf("100\n"); } if (c1 == '1' && c2 == '0' && c3 == '0') { printf("101\n"); } } void print(int type, int index, int len) { bool nonzeroPrinted = false; for (int i = 0; i < index - 2; i++) { printf("%c", number[i]); nonzeroPrinted = true; } switch(type) { case TYPE00: printf("11"); nonzeroPrinted = true; break; case TYPE01: if (nonzeroPrinted) { printf("00"); } break; case TYPE11: printf("10"); nonzeroPrinted = true; break; } for (int i = index; i < len; i++) { char znacik =number[i] == '0' ? '1' : '0'; if (znacik == 1 || nonzeroPrinted) { printf("%c", znacik); } nonzeroPrinted = true; } printf("\n"); } int main() { char znak; int sindex = 0; mainw: while(scanf("%c", &znak) == 1) { // printf("Scanned:%c:\n", znak); if (znak == '\n') { // Calculate int length = sindex; sindex = 0; char last3 = number[length - 1]; if (length == 1) { if (number[0] == '0') { printf("1");printf("\n"); continue; } if (number[0] == '1') { printf("110");printf("\n"); continue; } } char last2 = number[length - 2]; if (length == 2) { if (last2 == '1' && last3 == '0') { printf("11"); printf("\n");continue; } if (last2 == '1' && last3 == '1') { printf("0"); printf("\n");continue; } } char last1 = number[length - 3]; if (length == 3) { if (last1 == '1' && last2 == '1' && last3 == '1') { printf("100");printf("\n"); continue; } if (last1 == '1' && last2 == '1' && last3 == '0') { printf("111");printf("\n"); continue; } if (last1 == '1' && last2 == '0' && last3 == '0') { printf("101");printf("\n"); continue; } } if (last1 != '1' || last2 != '0' || last3 != '1') { simpleprint(length); continue; } int index = length - 3; while (true) { index--; if (index < 0) { index++; print(TYPE00, index, length); goto mainw; } else if (number[index] == '1') { index--; if (index < 0 || number[index] == '0') { // Tvar 01 1010101 index++; index++; print(TYPE01, index, length); goto mainw; } else { // Tvar 11 1010101 index++; index++; print(TYPE11, index, length); goto mainw; } } else if (number[index] == '0') { index--; if (index < 0 || number[index] == '0') { index++; index++; print (TYPE00, index, length); goto mainw; } else { // Pokracuj normalne } } } } else { number[sindex] = znak; sindex++; } } }