import java.util.*;
import java.math.*;
public class Main
{
static Scanner cin = new Scanner(System.in);
public static void main(String[] args)
{
//预处理素数
int prime[] = { 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101 };
BigInteger Prime[] = new BigInteger[26];
for (int i = 0; i<26; ++i)Prime[i] = BigInteger.valueOf(prime[i]);
//预处理幂次
BigInteger v0 = BigInteger.valueOf(0);
BigInteger v1 = BigInteger.valueOf(1);
BigInteger pow[][] = new BigInteger[12][32];
for (int i = 2; i <= 10; ++i)
{
pow[i][0] = v1;
for (int j = 1; j<32; ++j)pow[i][j] = pow[i][j - 1].multiply(BigInteger.valueOf(i));
}
//暴力枚举
int a[] = new int[32];
int ans[] = new int[12];
int n = 32;
int m = 500;
int cnt = 0;
for (int sta = 1;; sta += 2)
{
int len = 0;
for (int tmp = sta; tmp>0; tmp >>= 1)a[len++] = tmp & 1;
boolean ok = true;
for (int i = 2; i <= 10; ++i)
{
BigInteger bas = pow[i][n - 1];
for (int p = 0; p<len; ++p)if (a[p] == 1)bas = bas.add(pow[i][p]);
boolean flag = false;
for (int j = 0; j<26; ++j)if (bas.mod(Prime[j]) == v0)
{
ans[i] = prime[j];
flag = true;
break;
}
if (!flag)
{
ok = false;
break;
}
}
if (ok)
{
System.out.print("1");
for (int i = n - 2; i >= len; --i)System.out.print("0");
for (int i = len - 1; i >= 0; --i)System.out.print(a[i]);
for (int i = 2; i <= 10; ++i)System.out.print(" " + ans[i]);
System.out.println();
if (++cnt == m)break;
}
}
}
}
/*
【题意】
有一个二进制数(具体未知),位数为n(n>=2),
其最高位和最低位都为1,
我们把这个二进制数当做2~10进制的数,然后转变为二进制数。
如果这个数在2~10的所有进制下,都不是素数,那么得到一个合法目标数,
让你构造m个合法目标数。
【类型】
二进制枚举爆搜
【分析】
答案很普遍,直接暴力~
*/