#include <iostream> #include <vector> #include <queue> using namespace std; int getRoot(string& str) { int re = 0; int i = 0; while(str[i] != ':') { re = re * 10 + (str[i]-'0'); i++; } return re; } int getLeft(string& str) { int re = 0; int i = 0; while(str[i] != ':') { i++; } i++; bool sign = true; if(str[i] == '-') { sign = false; i++; } while(str[i] != '|') { re = re * 10 + (str[i]-'0'); i++; } if(sign == false) re = (-1)*re; return re; } int getRight(string& str) { int re = 0; int i = 0; while(str[i] != '|') { i++; } i++; bool sign = true; if(str[i] == '-') { sign = false; i++; } while(str[i] != '\0') { re = re * 10 + (str[i]-'0'); i++; } if(sign == false) re = (-1)*re; return re; } void middle(int root, vector< vector<int> >& child, vector<int>& re) { if(root == -1) return; middle(child[root][0], child, re); re.push_back(root); middle(child[root][1], child, re); } int main() { vector<int> parent(1023,-1); vector< vector<int> > child(1023, vector<int>(2,-1)); vector<int> tree; int ROOT; cin>>ROOT; tree.push_back(ROOT); queue<int> que; que.push(ROOT); string str; int left, right; int root; while(que.size()!=0) { cin>>str; root = getRoot(str); left = getLeft(str); right = getRight(str); if(left != -1) { parent[left] = root; que.push(left); tree.push_back(left); } if(right != -1) { parent[right] = root; que.push(right); tree.push_back(right); } child[root][0] = left; child[root][1] = right; que.pop(); } vector<int> rere; middle(ROOT, child, rere); for(unsigned long i = 1; i < rere.size(); i++) { if(rere[i] < rere[i-1]) { cout<<0<<endl; return 0; } } cout<<1<<endl; return 0; }