/*
#include <algorithm>
#include <queue>
#include <stdio.h>
#include <math.h>
using namespace std;
struct cmp{
bool operator()(int a, int b){
return a < b;
}
};
struct cmp1{
bool operator()(int a, int b){
return a > b;
}
};
priority_queue<int,vector<int>,cmp> p;
priority_queue<int,vector<int>,cmp1> q;
int main(){
int n,x;
scanf("%d",&n);
scanf("%d",&x);
p.push(x);
printf("%d\n", x);
scanf("%d",&x);
q.push(x);
int a = p.top();
p.pop();
int b = q.top();
q.pop();
p.push(b);
q.push(a);
}
printf("%d\n", p.top());
for(int i = 2; i < n; i++){
scanf("%d",&x);
if(p.size() > q.size()){
q.push(x);
}
else{
p.push(x);
}
int a = p.top();
p.pop();
int b = q.top();
q.pop();
p.push(b);
q.push(a);
}
printf("%d\n", p.top());
}
}
*/
/*
#include <stdio.h>
#include <algorithm>
#include <queue>
#include <stack>
using namespace std;
struct cmp{
bool operator()(int a, int b){
return a < b;
}
};
priority_queue<int,vector<int>,cmp> pq;
int main(){
long long int n, k, s=0,r,w;
scanf("%lld%lld", &n, &k);
for(int i = 0; i < n; i++){
scanf("%lld%lld",&r,&w);
}
}
*/
/*
#include <stdio.h>
long long int x, n, m, k=0,s=0,t[1010] = {};
int main(){
scanf("%lld%lld",&n,&m);
for(int i = 1; i <= n; i++){
scanf("%lld", &x);
k= (k + x) % m;
t[k]++;
}
s += t[0];
for(int i = 0; i < m; i++){
if(t[i] > 1) s += (t[i]*(t[i] - 1))/2;
}
printf("%lld",s);
return 0;
}
*/
/*
#include <stdio.h>
int n, m,x,x1,y1,x2,y2,ar[1050][1050] = {};
int main(){
scanf("%d%d",&n,&m);
for(int i = 1; i <= n; i++){
for(int j = 1; j <= n; j++){
scanf("%d",&x);
ar[i][j] = ar[i][j - 1] + x;
}
}
for(int i = 0; i < m; i++){
scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
long long int s = 0;
for(int j = x1; j <= x2; j++){
s += ar[j][y2] - ar[j][y1 - 1];
}
printf("%d\n",s);
}
}
*/
/*
#include <stdio.h>
int n, m, k, arr[2010][2010][2] = {};
int main(){
char x;
scanf("%d%d%d",&n,&m,&k);
for(int i = 1; i <= n; i++){
scanf("%c",&x);
for(int j = 1; j <= m; j++){
scanf("%c", &x);
if((i + j) % 2 == 0){
if(x == 'W'){
arr[i][j][0] = arr[i][j - 1][0] + 1;
arr[i][j][1] = arr[i][j - 1][1];
}
else{
arr[i][j][0] = arr[i][j - 1][0];
arr[i][j][1] = arr[i][j - 1][1] + 1;
}
}
else{
if(x == 'B'){
arr[i][j][0] = arr[i][j - 1][0] + 1;
arr[i][j][1] = arr[i][j - 1][1];
}
else{
arr[i][j][0] = arr[i][j - 1][0];
arr[i][j][1] = arr[i][j - 1][1] + 1;
}
}
}
}
for(int i = 2; i <= n; i++){
for(int j =1; j <= m; j++){
arr[i][j][0] += arr[i - 1][j][0];
arr[i][j][1] += arr[i - 1][j][1];
}
}
int s1,s2,z = 99999999;
if(k == 1) printf("0");
else{
for(int i = 1; i <= n - k + 1; i++){
for(int j = 1; j <= m - k + 1; j++){
s1 = arr[i+k-1][j+k-1][0] - arr[i+k-1][j-1][0] - arr[i-1][j+k-1][0] + arr[i-1][j-1][0];
s2 = arr[i+k-1][j+k-1][1] - arr[i+k-1][j-1][1] - arr[i-1][j+k-1][1] + arr[i-1][j-1][1];
if(s1 < z) z = s1;
if(s2 < z) z = s2;
}
}
printf("%d", z);
}
}
*/
/*
#include<stdio.h>
int main(){
int n, k, a, arr[100001] = {}, s=-99999999;
scanf("%d%d", &n, &k);
for(int i = 1; i <= n; i++){
scanf("%d", &a);
arr[i] += a + arr[i - 1];
}
for(int i = k; i <= n; i++){
if(arr[i] - arr[i-k] > s) s = arr[i] - arr[i-k];
}
printf("%d",s);
return 0;
}
*/
/*
#include<stdio.h>
char s[200010] = {},a,c;
int q, arr[200010][30] = {},x,y;
int main(){
scanf("%s", s);
for(int i = 0; s[i] != '\0'; i++){
if(i != 0){
for(int j = 0; j < 26; j++){
arr[i][j] = arr[i-1][j];
}
}
arr[i][(int)s[i] - 97]++;
}
scanf("%d", &q);
for(int i = 0; i < q; i++){
scanf("%c %c %d %d",&c,&a,&x,&y);
if(x != 0) printf("%d\n",arr[y][(int)a - 97] - arr[x-1][(int)a - 97]);
else printf("%d\n",arr[y][(int)a - 97]);
}
return 0;
}
*/
/*
#include <stdio.h>
#include <queue>
#include <algorithm>
#include <vector>
using namespace std;
int n, arr[100010] = {};
vector<int> v[100010];
void dfs(int a, int b){
arr[b] = a;
for(int i = 0; i < v[b].size(); i++){
if(v[b][i] == a) continue;
dfs(b, v[b][i]);
}
}
int main(){
scanf("%d", &n);
for(int i = 0; i < n-1; i++){
int a, b;
scanf("%d%d", &a, &b);
v[a].push_back(b);
v[b].push_back(a);
}
for(int i = 0; i < v[1].size(); i++){
dfs(1, v[1][i]);
}
for(int i =2 ; i<=n; i++){
printf("%d\n",arr[i]);
}
}
*/
/*
#include <stdio.h>
#include <queue>
using namespace std;
int n;
char x[5] = {}, arr[100] = {};
queue<int> q[3];
void f(int a, int b){
printf("%c", (char)(b+64));
for(int i = 1; i <= n; i++){
if(arr[i] == 2 a) f(2a, i);
}
for(int i = 1; i <= n; i++){
if(arr[i] == 2 a + 1) f(2a + 1, i);
}
}
void g(int a, int b){
for(int i = 1; i <= n; i++){
if(arr[i] == 2 a) g(2a, i);
}
printf("%c", (char)(b+64));
for(int i = 1; i <= n; i++){
if(arr[i] == 2 a + 1) g(2a + 1, i);
}
}
void h(int a, int b){
for(int i = 1; i <= n; i++){
if(arr[i] == 2 a) h(2a, i);
}
for(int i = 1; i <= n; i++){
if(arr[i] == 2 a + 1) h(2a + 1, i);
}
printf("%c", (char)(b+64));
}
int main(){
scanf("%d", &n);
arr[1] = 1;
for(int i = 1; i <= n; i++){
scanf("\n%c %c %c", &x[0], &x[1], &x[2]);
int k = arr[(int)x[0] - 64];
if(k != 0){
if(x[1] != '.') arr[(int)x[1] - 64] = 2*k;
if(x[2] != '.') arr[(int)x[2] - 64] = 2*k+1;
}
else{
q[0].push((int)x[0] - 64);
if(x[1] != '.') q[1].push((int)x[1] - 64);
else q[1].push(0);
if(x[2] != '.') q[2].push((int)x[2] - 64);
else q[2].push(0);
}
}
while(!q[0].empty()){
int w = q[0].front(), e = q[1].front(), r = q[2].front();
q[0].pop();
q[1].pop();
q[2].pop();
int k = arr[w];
if(k != 0){
if(e != 0) arr[e] = 2*k;
if(r != 0) arr[r] = 2*k+1;
}
else{
q[0].push(w);
if(e != 0) q[1].push(e);
else q[1].push(0);
if(r != 0) q[2].push(r);
else q[2].push(0);
}
}
f(1, 1);
printf("\n");
g(1,1);
printf("\n");
h(1,1);
}
*/
#include <stdio.h>
#include <queue>
#include <vector>
using namespace std;
int n;
char x[5] = {};
vector<int> v[30];
void f(int a){
if(a > 0) printf("%c", (char)(a+64));
if(v[a][0] > 0) f(v[a][0]);
if(v[a][1] > 0) f(v[a][1]);
}
void g(int a){
if(v[a][0] > 0) g(v[a][0]);
if(a > 0) printf("%c", (char)(a+64));
if(v[a][1] > 0) g(v[a][1]);
}
void h(int a){
if(v[a][0] > 0) h(v[a][0]);
if(v[a][1] > 0) h(v[a][1]);
if(a > 0) printf("%c", (char)(a+64));
}
int main(){
scanf("%d", &n);
for(int i = 1; i <= n; i++){
scanf("\n%c %c %c", &x[0], &x[1], &x[2]);
v[(int)x[0] - 64].push_back((int)x[1] - 64);
v[(int)x[0] - 64].push_back((int)x[2] - 64);
}
f(1);
printf("\n");
g(1);
printf("\n");
h(1);
}