#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define maxlen 1000000001
char expr[maxlen], bset[maxlen];
int pos;
typedef struct _node{
int data;
struct _node *left;
struct _node *right;
}Node;
int parseNum(){
int res = 0;
while('0' <= expr[pos] && expr[pos] <= '9'){
res = res*10 + (expr[pos]-'0');
pos++;
}
return res-1;
}
Node* expr2ast(){
if(expr[pos] == '\0') return NULL;
Node
* root
= (Node
*)malloc(sizeof(Node
)); root->data = parseNum();
// printf("parsed: %d, pos = %d\n", root->data, pos);
if(expr[pos] == '?'){
pos++;
root->left = expr2ast();
root->right= expr2ast();
}else if(expr[pos] == ':'){
pos++;
}
return root;
}
void preOrder(Node* root){
if(root){
preOrder(root->left);
preOrder(root->right);
}
}
void inOrder(Node* root){
if(root){
inOrder(root->left);
inOrder(root->right);
}
}
int cclAST(Node* root){
// printf("node: %d, value: %d\n", root->data, bset[root->data] - '0');
if(root->left == NULL || root->right == NULL){
// printf("finally: %d\n", bset[root->data] - '0');
return bset[root->data] - '0';
}
if(bset[root->data] - '0'){
return cclAST(root->left);
}else{
return cclAST(root->right);
}
}
signed main(signed argc, char* argv[]){
pos = 0;
Node* ast = expr2ast();
// preOrder(ast); printf("\n");
// inOrder(ast); printf("\n");
while(T--){
// printf("%c %d\n", bset[4], bset[4] - '0');
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgojZGVmaW5lIG1heGxlbiAxMDAwMDAwMDAxCgpjaGFyIGV4cHJbbWF4bGVuXSwgYnNldFttYXhsZW5dOwppbnQgcG9zOwp0eXBlZGVmIHN0cnVjdCBfbm9kZXsKICAgIGludCBkYXRhOwogICAgc3RydWN0IF9ub2RlICpsZWZ0OwogICAgc3RydWN0IF9ub2RlICpyaWdodDsKfU5vZGU7CgppbnQgcGFyc2VOdW0oKXsKICAgIGludCByZXMgPSAwOwogICAgd2hpbGUoJzAnIDw9IGV4cHJbcG9zXSAmJiBleHByW3Bvc10gPD0gJzknKXsKICAgICAgICByZXMgPSByZXMqMTAgKyAoZXhwcltwb3NdLScwJyk7CiAgICAgICAgcG9zKys7CiAgICB9CiAgICByZXR1cm4gcmVzLTE7Cn0KCk5vZGUqIGV4cHIyYXN0KCl7CiAgICBpZihleHByW3Bvc10gPT0gJ1wwJykgcmV0dXJuIE5VTEw7CiAgICBOb2RlKiByb290ID0gKE5vZGUqKW1hbGxvYyhzaXplb2YoTm9kZSkpOwogICAgcm9vdC0+ZGF0YSA9IHBhcnNlTnVtKCk7CiAgICAvLyBwcmludGYoInBhcnNlZDogJWQsIHBvcyA9ICVkXG4iLCByb290LT5kYXRhLCBwb3MpOwogICAgaWYoZXhwcltwb3NdID09ICc/Jyl7CiAgICAgICAgcG9zKys7CiAgICAgICAgcm9vdC0+bGVmdCA9IGV4cHIyYXN0KCk7CiAgICAgICAgcm9vdC0+cmlnaHQ9IGV4cHIyYXN0KCk7CiAgICB9ZWxzZSBpZihleHByW3Bvc10gPT0gJzonKXsKICAgICAgICBwb3MrKzsKICAgIH0KICAgIHJldHVybiByb290Owp9Cgp2b2lkIHByZU9yZGVyKE5vZGUqIHJvb3QpewogICAgaWYocm9vdCl7CiAgICAgICAgcHJpbnRmKCIlZCAiLCByb290LT5kYXRhKTsKICAgICAgICBwcmVPcmRlcihyb290LT5sZWZ0KTsKICAgICAgICBwcmVPcmRlcihyb290LT5yaWdodCk7CiAgICB9Cn0KCnZvaWQgaW5PcmRlcihOb2RlKiByb290KXsKICAgIGlmKHJvb3QpewogICAgICAgIGluT3JkZXIocm9vdC0+bGVmdCk7CiAgICAgICAgcHJpbnRmKCIlZCAiLCByb290LT5kYXRhKTsKICAgICAgICBpbk9yZGVyKHJvb3QtPnJpZ2h0KTsKICAgIH0KfQppbnQgY2NsQVNUKE5vZGUqIHJvb3QpewogICAgLy8gcHJpbnRmKCJub2RlOiAlZCwgdmFsdWU6ICVkXG4iLCByb290LT5kYXRhLCBic2V0W3Jvb3QtPmRhdGFdIC0gJzAnKTsKICAgIGlmKHJvb3QtPmxlZnQgPT0gTlVMTCB8fCByb290LT5yaWdodCA9PSBOVUxMKXsKICAgICAgICAvLyBwcmludGYoImZpbmFsbHk6ICVkXG4iLCBic2V0W3Jvb3QtPmRhdGFdIC0gJzAnKTsKICAgICAgICByZXR1cm4gYnNldFtyb290LT5kYXRhXSAtICcwJzsKICAgIH0KICAgIGlmKGJzZXRbcm9vdC0+ZGF0YV0gLSAnMCcpewogICAgICAgIHJldHVybiBjY2xBU1Qocm9vdC0+bGVmdCk7CiAgICB9ZWxzZXsKICAgICAgICByZXR1cm4gY2NsQVNUKHJvb3QtPnJpZ2h0KTsKICAgIH0KfQoKc2lnbmVkIG1haW4oc2lnbmVkIGFyZ2MsIGNoYXIqIGFyZ3ZbXSl7CiAgICBzY2FuZigiICVzIiwgZXhwcik7CiAgICBwb3MgPSAwOwogICAgTm9kZSogYXN0ID0gZXhwcjJhc3QoKTsKICAgIC8vIHByZU9yZGVyKGFzdCk7IHByaW50ZigiXG4iKTsKICAgIC8vICBpbk9yZGVyKGFzdCk7IHByaW50ZigiXG4iKTsKICAgIGludCBUOyBzY2FuZigiICVkIiwgJlQpOwogICAgd2hpbGUoVC0tKXsKICAgICAgICBzY2FuZigiICVzIiwgYnNldCk7CiAgICAgICAgLy8gcHJpbnRmKCIlYyAlZFxuIiwgYnNldFs0XSwgYnNldFs0XSAtICcwJyk7CiAgICAgICAgcHJpbnRmKCIlZFxuIiwgY2NsQVNUKGFzdCkpOwogICAgfQogICAgcmV0dXJuIDA7Cn0=