package arithmetic;
import java.util.Scanner;
public class Main {
public static int maxProduct(int[] list,int start,int end){
int sum=0;//记录数组中-2的个数[start,end)
if(start==end||start+1==end){
return 0;
}
for(int i=start;i<end;i++){
if(list[i]==-2) sum++;
}
if(sum%2==0){
return end-start;}//第一种情况-2的个数是偶数,此时直接返回end-start的个数即可
else {//一共有sum(奇数) 个 -2 减掉其中一个-2就可以了 减掉左边-2 或者右边-2 哪边短减掉哪边的
//2 2 -2 2 2 -2 -2 2
// ---
//0 1 2 3 4 5 6 7去掉6 7 即最终结果为6个连续最大
int s=start,e=end;//肯定会存在一个-2
for(int i=start;i<end;i++){
if(list[i]==-2){ s=i;//从前往后数记录第一个-2 的坐标s
break;}
}
for(int i=end-1;i>=start;i--){
if(list[i]==-2){ e=i;//从后往前数记录最后一个 -2的下坐标 e
break;
}
}
//比较左右两边如果需要去掉-2的长度
//下面考虑只有一个-2的情况
if(s==e){
if((s-start+1)>(end-e)){
return s-start;
}
else return end-e-1;
}
else if((s-start+1)>(end-e)){//左边长度大于右边的话 就去掉右边最后一个-2 去掉比较短的-2
return e-start;
}
else return end-s-1;//否则去掉左边的第一个-2
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner cin=new Scanner(System.in);
int sets=cin.nextInt();
int number;
//int[] elements;
for(int j=1;j<=sets;j++){
int s=0;
number=cin.nextInt();
int[] elements=new int[number];
int[] sign=new int[number+1];
for(int i=0;i<number;i++){
elements[i]=cin.nextInt();
if(elements[i]==0){
sign[s++]=i;//将为0的数的下标记录下来 是第i+1个数
}
}
sign[s]=number;//设置一个结束标志位
int answer=0;
int t=0;
for(int p=0;p<=s;p++)//这个时候s= (0的个数 ) 因为我自己放进去了一个0的标识;即分开了多少个不含0的数组
{
answer=Math.max(answer,maxProduct(elements,t,sign[p])); //sign[p]是0的下坐标
t=sign[p]+1; //t是下个不含0数组开始的下标
}
System.out.printf("Case #%d: %d\n",j,answer);
}
cin.close();
}
}