<pre name="code" class="cpp">/*奶牛*/
#include<algorithm>
#include<cstdio>
#include<iostream>
#include<cmath>
#include<string>
#include<cstring>
using namespace std;
int n,v[50],m,g[50][50],a[50],ans[50],anss;
void dfs(int i)
{
if (i==m+1)
{
bool o=true;
int t[50]={0},tot=0;
for (int j=1;j<=m;j++) if (a[j])
{
tot++;
for (int l=1;l<=n;l++) t[l]+=g[j][l];
}
if (tot>=anss)return ;
for (int j=1;j<=n;j++) if (t[j]<v[j]) o=false;
if (!o) return ;
anss=tot;
memcpy(ans,a,sizeof(a));
return;
}
a[i]=1;
dfs(i+1);
a[i]=0;
dfs(i+1);
}
int main()
{
scanf("%d",&n);
for (int i=1;i<=n;i++) scanf("%d",&v[i]);
scanf("%d",&m);
for (int i=1;i<=m;i++)
for (int j=1;j<=n;j++) scanf("%d",&g[i][j]);
anss=0x3f3f3f3f;
dfs(1);
printf("%d ",anss);
for (int i=1;i<=m;i++)if (ans[i])printf("%d ",i);
return 0;
}
/*分数*/
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cmath>
#include<string>
using namespace std;
struct aa
{
double k;
int a,b;
bool operator <(const aa & b)const
{
return k<b.k;
}
}a[500009];
int n;
int gcd(int a,int b)
{
return b ? gcd(b,a%b) : a;
}
int main()
{
scanf("%d",&n);
a[1].k=0;
a[1].a=0;
a[1].b=1;
int tot=1;
for (int i=1;i<=n;i++)
{
for (int j=1;j<=i;j++)
if (gcd(i,j)==1)
{
tot++;
a[tot].k=(double)j/(double)i;
a[tot].a=j;a[tot].b=i;
}
}
sort(a+1,a+tot+1);
for (int i=1;i<=tot;i++) printf("%d/%d\n",a[i].a,a[i].b);
return 0;
}