/*
* 解题思路:
* 题意不难理解,就是利用所给公式求出最多可产生不同的随机数个数
* 最开始的思路是像题目中例子那样,如果产生一个数跟第一个种子相同的话则跳出循环
* 写完代码后发现第三个Sample进入死循环,则发现最终的那个数有时候不是跟第一个种子相同,
* 而是跟任意一个已产生的种子数相同就判跳出循环
*/
#include <stdio.h>
#include <string.h>
int vis[ 10000 ];
int main( )
{
int Z,I,M,L;
int total = 1,sum,tmp;
while( scanf("%d%d%d%d",&Z,&I,&M,&L) && ( Z||I||M||L ) )
{
sum = 0;
memset( vis,0,sizeof( vis ) );
while( 1 )
{
tmp = (Z*L+I) % M;
if( vis[ tmp ] != 0 ) break;
sum++;
vis[ tmp ]++;
L = tmp;
}
printf("Case %d: %d\n",total++,sum);
}
return 0;
}