// 浙大12机试
// 九度:1468
//
// Sharing:单词链表存储,共享后缀存储空间
//
#include <stdio.h>
#include <string.h>
#include <algorithm>
#define SIZE 100005
using namespace std;
struct Node{
int add;
char data;
int next;
int npos;
bool operator < (const Node & A) const{
return add < A.add;
}
};
Node a[SIZE];
int BS(int add, int len)
{
int low=0, high =len-1;
while(low <= high)
{
int mid = (low+high)/2;
if(a[mid].add == add)
{
return mid;
}
else if(a[mid].add > add)
{
high = mid-1;
}
else
{
low = mid +1;
}
}
}
void creatList(const int start, int &ilen, const int len)
{
int p=start;
ilen++;
while(p != -1)
{
if(a[p].next != -1)
{
a[p].npos=BS(a[p].next, len);
p=a[p].npos;//moving to next
ilen++;
}
else
{
a[p].npos=-1;
p=a[p].npos;//moving to next
}
}
}
int main()
{
#ifdef ONLINE_JUDGE
#else
freopen("E:\\in.txt" , "r", stdin);
//freopen("E:\\out.txt", "w", stdout);
#endif
int add1, add2, n;
while(scanf("%d%d%d", &add1, &add2, &n) != EOF)
{
memset(a, 0, sizeof(a));
int i;
for(i=0; i<n; i++)
{
scanf("%d %c %d", &a[i].add, &a[i].data, &a[i].next);
}
sort(a, a+n);
/*
for(i=0; i<n; i++){
printf("%05d %c %05d\n", a[i].add, a[i].data, a[i].next);
}
*/
int p1, p2;//字符串的开始下标
p1=BS(add1, n);
p2=BS(add2, n);
//printf("%05d %c %05d\n", a[p1].add, a[p1].data, a[p1].next);
//printf("%05d %c %05d\n", a[p2].add, a[p2].data, a[p2].next);
int len1=0, len2=0;
creatList(p1, len1, n);
creatList(p2, len2, n);
//printf("len1:%d\n", len1);
//printf("len2:%d\n", len2);
/*
int t=p1;
while( t!= -1)
{
printf("%05d %c %05d\n", a[t].add, a[t].data, a[t].next);
t=a[t].npos;
}
*/
if(len1 > len2)
{
for(i=0; i<len1-len2; i++)
{
p1 = a[p1].npos;
}
}
if(len2 > len1)
{
for(i=0; i<len2-len1; i++)
{
p2 = a[p2].npos;
}
}
while(p1 != p2)
{
p1 = a[p1].npos;
p2 = a[p2].npos;
}
if(p1 == -1)
{
printf("-1\n");
}//到了末尾才相同NULL
else
{
printf("%05d\n", a[p1].add);
}
}//while
return 0;
}