//============================================================================
// Name : POJ_3652.cpp
// Author : tiger
// Version :
// Copyright : Your copyright notice
// Description : 模拟计算,直到产生的数的数量为C个或者某个新数=S,对于每个数x
// 用x^S来统计改变的位(x^S的那个bit为1说明这个bit改变了),把所有的
// x^S 或运算,结果为state,这样state中为1的bit就是改变了输出“?”
// 否则输出S中相应bit即可
//============================================================================
#include <iostream>
using namespace std;
int A, B, C, S;
int sovel()
{
int x = S;
int state = 0;
int n = 1;
while ( (x = (A * x + B) % C ) && x != S && n <= C)
{
n ++;
state |= (x ^ S);
}
return state;
}
int main()
{
freopen("in", "r", stdin);
int i;
int state;
while (scanf("%d", &A) && A)
{
scanf("%d %d %d", &B, &C, &S);
state = sovel();
for (i = 1; i <= 16; i++)
{
if (state & (1 << (16 - i)))
{
printf("?");
}
else
{
if( S & (1 << (16 - i)) )
printf("1");
else
printf("0");
}
}
printf("/n");
}
return 0;
}