usaco 2.1 holstein 2008.5.20
{
ID:
PROG: holstein
LANG: PASCAL
}
program p_holstein;
constfin='holstein.in';fout='holstein.out';
maxv=25;maxg=15;
type
arr1=array[1..maxg,1..maxv]of longint;
arr2=array[1..maxv]of longint;
arr3=array[1..maxv]of longint;
var
a:arr1;b,y:arr2;x:arr3;
f:array[1..maxv]of boolean;
f1,f2:text;tt:boolean;
l,v,g,i,r,u:longint;
procedure init;
var i,j:longint;
begin
assign(f1,fin);reset(f1);
assign(f2,fout);rewrite(f2);
read(f1,v);
fori:=1 to v do read(f1,b[i]);
read(f1,g);
fori:=1 to g do
for j:=1 to v do
read(f1,a[i,j]);
end;
procedure print;
vari:longint;
begin
iftt=false then
begin
write(f2,l);
for i:=1 to l do write(f2,' ',x[i]);
writeln(f2);
tt:=true;
end;
end;
function tr:boolean;
vark:longint;
begin
tr:=true;
for k:=1 to v do if y[k]<b[k] then exit(false);
end;
procedure deal(p:longint);
var j,k:longint;
begin
ifp>i+1 then exit;
iftr then begin l:=p-1;print;exit;end
else
forj:=x[p-1]+1 to g do
begin
x[p]:=j;
for k:=1 to v do inc(y[k],a[j,k]);
deal(p+1);
for k:=1 to v do dec(y[k],a[j,k]);
end;
end;
{-----------------------}
begin
fillchar(y,sizeof(y),0);
init;i:=0;tt:=false;
repeat
inc(i);
for r:=1 to g-i+1 do
begin
for u:=1 to v do
y[u]:=a[r,u];
x[1]:=r;
deal(2);
end;
until tt;
close(f1);
close(f2);
end.