显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
inline int read()
{
int f=1,num=0;
char c=getchar();
while(c<'0'||c>'9'){if(c=='-') f=-1;c=getchar();}
while(c>='0'&&c<='9') num=num*10+c-'0',c=getchar();
return num*f;
}
const int N=100010;
int t;
int n,m,k;
int a[N][2];
int l[N];
int z,b;
int r;
bool flag;
int main()
{
freopen("Moo.in","r",stdin);
freopen("Moo.out","w",stdout);
t=read();
while(t--)
{
flag=1;
n=read();m=read();k=read();
for(int i=1;i<=m;i++)
{
z=b=INT_MAX;
for(int j=1,x;j<=k;j++)
{
x=read();
if(x&1) a[i][0]=max(a[i][0],x),b=min(b,x);
else a[i][1]=max(a[i][1],x),z=min(z,x);
}
if(a[i][0]==0) a[i][0]=-z;
if(a[i][1]==0) a[i][1]=-b;
}
l[m]=1;
for(int i=m-1;i>=1;i--) l[i]=max(l[i+1]+min(a[i][0],a[i][1]),1);
r=n;
for(int i=1;i<=m;i++)
{
r-=min(a[i][0],a[i][1]);
if(r<l[i])
{
flag=0;
printf("-1\n");
for(int i=1;i<=m;i++) a[i][0]=a[i][1]=l[i]=0;
break;
}
}
if(!flag) continue;
for(int i=1;i<=m;i++)
{
if(n-a[i][0]>=l[i]) printf("Even "),n-=a[i][0];
else printf("Odd "),n-=a[i][1];
a[i][0]=a[i][1]=l[i]=0;
}
printf("\n");
}
return 0;
}