//把一个小于1的小数转化为二进制形式,找到最小循环部分的起始位置以及最小循环长度
//欧拉定理 十进制小数转化为二进制:乘二取整法
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long LL;
LL gcd(LL a,LL b)
{
return b==0?a:gcd(b,a%b);
}
LL ouler(LL n)
{
LL res=n;
for(int i=2;1l*i*i<=n;i++)
{
if(n==1) break;
if(n%(LL)i==0) {
res/=(LL)i;
res*=((LL)i-1);
while(n%(LL)i==0) {
n/=(LL)i;
}
}
}
if(n!=1) {
res/=n;
res*=(n-1);
}
return res;
}
LL mul(LL a,LL b,LL m)
{
LL ans=0;
while(b)
{
if(b&1) ans=(ans+a)%m;
a=(a<<1)%m;
b>>=1;
}
return ans;
}
LL pow(LL a,LL b,LL m)
{
LL ans=1;
while(b)
{
if(b&1) ans=mul(ans,a,m);
a=mul(a,a,m);
b>>=1;
}
return ans;
}
int main()
{
LL p,q,kase=0;
while(~scanf("%lld/%lld",&p,&q))
{
LL k=gcd(p,q);
p/=k;
q/=k;
LL solve=0;
while(q%2==0) {
solve++;
q/=(LL)2;
}
//cout<<solve<<endl;
LL f=ouler(q);
LL solve1=f;
//枚举因子
for(int i=1;(LL)i*i<=f;i++)
{
if(f%i==0) {
if(pow(2,i,q)==1) {
solve1=min(solve1,(LL)i);
}
if(pow(2,f/(LL)i,q)==1) {
solve1=min(solve1,f/(LL)i);
}
}
}
//cout<<solve1<<endl;
printf("Case #%d: ",++kase);
cout<<solve+1<<","<<solve1<<endl;
}
return 0;
}