#include <bits/stdc++.h>
#define int long long
#define ff first
#define ss second
using namespace std;
int w[1000001] = {0};
int par[1000001] = {0};
vector <vector<int>> scales, adj;
void weigh(int u) {
int lef = 0, rig = 0;
int wlef = 0, wrig = 0;
if (scales[u].size() == 0) {
weigh(adj[u][0]);
weigh(adj[u][1]);
lef = w[adj[u][0]];
rig = w[adj[u][1]];
}
if (scales[u].size() == 1){
weigh(adj[u][0]);
lef = scales[u][0];
rig = w[adj[u][0]];
}
if (scales[u].size() == 2) {
lef = scales[u][0];
rig = scales[u][1];
}
w[u] = max(rig, lef) * 2;
// cout << u << ' ' << rig << ' ' << lef << endl;
}
signed main() {
ios_base::sync_with_stdio(0);
cin.tie(NULL);
int n;
cin >> n;
scales.resize(n + 1);
adj.resize(n + 1);
for (int i = 1;i <= n;i++) {
int x, y;
cin >> x >> y;
if (x > 0) {
adj[i].push_back(x);
par[x] = i;
}
else {
scales[i].push_back(-x);
w[i] -= x;
}
if (y > 0) {
adj[i].push_back(y);
par[y] = i;
}
else {
scales[i].push_back(-y);
w[i] -= y;
}
}
weigh(1);
// cout << w[1] << ' ';
string s = "";
while (w[1] > 0) {
if (w[1] % 2 == 0) {
s += '0';
}
else {
s += '1';
}
w[1] /= 2;
}
reverse(s.begin(), s.end());
cout << s << endl;
// for (int i = 2;i <= n;i++) {
// cout << w[i] << ' ';
// }
}