import java.util.*; 
import java.math.BigInteger;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static long initStatus;
    public static long finalStatus;
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        int n = in.nextInt();
        int m = in.nextInt();
        int planNumber = in.nextInt();
        StringBuffer sb = new StringBuffer();
        for(int i = 0;i < n;i++){
            sb.append(in.next());
        }
        initStatus = new BigInteger(sb.toString(),2).longValue();
        sb = new StringBuffer();
        for(int i = 0;i < m*n;i++)sb.append("1");
        finalStatus = new BigInteger(sb.toString(),2).longValue();
        int checkStatus = 0;
        long[] plans = new long[planNumber];
        for(int i = 0;i < planNumber;i ++){
            sb = new StringBuffer();
            for(int j = 0;j < n;j++){
                sb.append(in.next());
            }
            plans[i] = new BigInteger(sb.toString(),2).longValue();
        }
        if(initStatus == finalStatus){
            System.out.println(0);
            return;
        }
        String result = dfs(plans,0,0);
        if(result == "false"){
            System.out.println(-1);
        }
        else{
            System.out.println(result.split(" ").length);
            System.out.println(result);
        }
    }
    public static String dfs(long[] plans,long curStatus,int curPos){
        if(curPos > plans.length)return "false";
        //仅有两个数字在同一位置均为1时结果不为0,表示存在冲突
        if((curStatus & initStatus) != 0)return "false";
        //当全覆盖,返回当前位置
        if((curStatus | initStatus) == finalStatus)return "";
        if(curPos == plans.length)return "false";
        int min = 100;
        //使用下一个计划的情况
        String str = dfs(plans,curStatus | plans[curPos],curPos + 1);
        if(str != "false" && str.length() < min){
            min = str.length();
        }
        //不使用下一个计划的情况
        String str1 = dfs(plans,curStatus,curPos + 1);
        if(str1 != "false" && str1.length() <= min){
            min = str1.length();
            return str1;
        }
        //两种递归路径都没有可行解
        if(min == 100)return "false";
        return (curPos + 1) + " " + str;
    }
}

提供一个Java版的位运算解答版本