http://acm.hdu.edu.cn/showproblem.php?pid=3049
//这题简单一点说就是求 A/B%P
//由 B*B~ = kP +1; B~ 是B关于P的逆元;B~ = (kP + 1)/B//所以 A*B~ = A*(kP + 1)/B = P*k(A/B) + A/B;
//当A整除B时有:A/B%P = A*B~%P
#include<iostream>
using namespace std;
//求b关于a的逆元
int mulinv(int b,int a)//求一个整数b对a的乘法逆元
{
int x1,x2,x3;
int y1,y2,y3;
int t1,t2,t3;
x1=1;
x2=0;
x3=a;
y1=0;
y2=1;
y3=b;
int k;
for(t3=x3%y3;t3!=0;t3=x3%y3)
{
k=x3/y3;
t2=x2-k*y2;
t1=x1-k*y1;
x1=y1;
x2=y2;
x3=y3;
y1=t1;
y2=t2;
y3=t3;
}
if(y2<0)
y2+=a;
if(y3==1)
return y2;
else
return 0;
}
__int64 modular(__int64 b,__int64 n,__int64 m)//求同余幕
{
__int64 x=1,power=b%m;
__int64 temp=n;
int a[65];
int k=0,i;
while(temp>0)
{
a[k++]=temp%2;
temp/=2;
}
for(i=0;i<k;i++)
{
//printf("%d\n",a[i]);
if(a[i]==1)
x=(x*power)%m;
power=(power*power)%m;
}
return x;
}
int main()
{
int N,P = 1000003;
int T;
int cases = 0;
int nk,i;
__int64 mod;
__int64 mod1;
scanf("%d",&T);
getchar();
while(T--)
{
cases++;
mod = 0;
scanf("%d",&N);
for(i = 0;i<N;i++)
{
scanf("%d",&nk);
mod1 = modular(2,nk,P);
mod = (mod+mod1)%P;
}
// printf("%I64d\n",mulinv(N,P));
mod = (mulinv(N,P)*mod)%P;
printf("Case %d:%I64d\n",cases,mod);
}
return 0;
}