#include <stdio.h>
int main(void) {
int i=0;         // индекс текущей команды
int j=0;         // индекс массива данных
int acc = 0;
int pzflag = 1; // Флаг acc>=0
char command_mem[100] = "^>-{^?}<^!."; // максимум
int data_mem[10]={0}; 
data_mem[0]=3;   //инициализируем начальные значения
data_mem[1]=5;
 
while ( command_mem[i] != '\0') {
if(command_mem[i]==',')      // считываем число в аккумулятор
    scanf("%d", &acc);	
if(command_mem[i]=='+')      // прибавляем число из data_mem
    acc=acc+data_mem[j];     // к аккумулятору
if(command_mem[i]=='-')      // вычитаем число data_mem
    acc=acc-data_mem[j];     // из аккумулятора
if(command_mem[i]=='>')      // переход на следующий элемент данных
    j++;
if(command_mem[i]=='<')      //переход на предыдущий элемент данных
    j--;
if(command_mem[i]=='~')      // загружаем число из аккумулятора
    data_mem[j]=acc;         // в память данных
if(command_mem[i]=='^')      // загружаем число из data_mem
    acc=data_mem[j];         // в аккумулятор
if(command_mem[i]=='.') {    // выводим число из аккумулятора на экран
    printf("Output: %d",acc); 
    printf(" ");
	};
if(command_mem[i]=='?') {     // прыжок на метку !
    while(command_mem[i] != '!') 
        i++; 
    } 
if (command_mem[i]=='{' && pzflag==1) { // прыжок по условию acc>=0
    while(command_mem[i] != '}') 
        i++; 	 
    } 
if(acc>=0){    // Поднимаем флаг, если acc>=0
    pzflag=1; }
else {
    pzflag=0; }	
i++;   //увеличиваем индекс текущей команды         
}
//переход на новую строку
printf("\n");
// выводим массив данных
for (int k = 0; k<10; k++)
printf("%d ", data_mem[k]);
return 0;
}