#include<iostream>
using namespace std;
int main()
{
int begin, end, len;
cin >> begin >> end >> len;
int* p = new int[len];
int* pNext = new int[len];
p[0] = begin;
p[len - 1] = end;
int val;
for (int i = 0; i < len; i++)
{
cin >> val;
pNext[i] = val;
}
for (int i = 2; i < len; i++)
{
if (pNext[i] == 0)
{
//取第一个元素的相反值
if (p[0] == 1)
p[i - 1] = 0;
if (p[0] == 0)
p[i - 1] = 1;
}
//不等于0的情况 pnext数组的值就算加 每次也只可能+1 其他情况是错的
else if (pNext[i] - pNext[i - 1] == 1)
{
p[i - 1] = p[pNext[i] - 1];
}
//出错情况 pNext记录数字i还大 还有就是 pNext不准确 明明前后缀更大却只记录了小的 最后 pNext数组增长的时候不是1 明显不可能
else if (pNext[i] > i || (pNext[i] - pNext[i - 1] != 1 && p[i - pNext[i] - 1] == p[0])|| pNext[i] - pNext[i - 1] >1)
{
cout << "ERROR" << endl;
delete[]p;
delete[]pNext;
return 0;
}
}
//打印数组
for (int i = 0; i < len; i++)
{
cout << p[i];
}
delete[]p;
delete[]pNext;
return 0;
}