#codethanksfestival2017e. [code_thanks_festival_2017_e]Coin Authentication

[code_thanks_festival_2017_e]Coin Authentication

问题描述

这是一个互动问题。

海豚在城市里找到了 NN 个袋子,每个袋子里装有 wiw_i 克重的硬币,数量为 1000010000 枚。

然而,海豚记起城市中流通着许多假币。在这 NN 个袋子中,可能有一些袋子只装有假币。海豚想要找出真币的袋子。

这些硬币的外观完全相同,但真币和假币的重量不同。已知真币的重量为 99 克或 1111 克,假币的重量为 88 克、1010 克或 1212 克。海豚对袋子中硬币的重量 wiw_i 一无所知。

海豚决定向朋友虎鲸借用一个秤来解决问题。通过秤,进行以下步骤来测量硬币的重量:

  • 对于每个袋子,选取整数 0si10000(1iN)0≤s_i≤10000 (1≤i≤N)
  • 从第 ii 个袋子中取出 sis_i 枚硬币,放在秤上。
  • 进行测量,得到放在秤上的硬币的总重量。
  • 最后,将放在秤上的硬币放回原来的袋子。

然而,虎鲸非常忙碌,所以海豚最多只能进行 1010 次硬币测量。请确定哪些袋子中包含真币。

约束条件

  • 1N501≤N≤50
  • 8wi128≤w_i≤12
  • NNwiw_i 都是整数

输入输出

首先,从标准输入读入一个形如以下格式的整数 NN

NN

接下来,你需要通过提问发出查询并进行硬币测量。你最多可以进行 1010 次查询。每个查询应按以下格式输出到标准输出:

? s1s_1 s2s_2 sNs_N

这里 sis_i 是放在秤上的第 ii 个袋子中硬币的数量,必须是大于等于 00 且小于等于 1000010000 的整数。

然后,从标准输入读入查询的答案,形式如下:

ansans

这里 ansans 是一个非负整数,表示秤的测量结果为 ansans 克。

最后,你需要按以下格式输出答案:

! a1a_1 a2a_2 aNa_N

这里 aia_i 必须为 1 表示第 ii 个袋子中的硬币是真币,或者为 0 表示第 ii 个袋子中的硬币是假币。注意,答案的输出不包括查询硬币测量的次数限制。

评判

  • 必须在输出末尾包含换行符,并且在此之后必须刷新标准输出。 否则可能会超时。
  • 输出答案后,必须立即结束程序。否则行为未定义。
  • 当输出的答案不正确时,行为未定义(可能不是 WA)。

示例

本示例中,N=5N = 5, w1=8w_1 = 8, w2=9w_2 = 9, w3=10w_3 = 10, w4=11w_4 = 11, w5=12w_5 = 12,答案为 0 1 0 1 0

输入:

5

输出:

? 1 0 0 0 0
8
? 0 1 0 0 0
9
? 0 0 1 0 0
10
? 0 0 0 1 0
11
? 0 0 0 0 1
12
! 0 1 0 1 0