#4404. 翻转和调整(Flip and Adjust)

翻转和调整(Flip and Adjust)

题目描述

NN张卡片,每张卡片正反两面都写有一个整数。第ii张卡片正面写有整数aia_i,反面写有整数bib_i。你可以选择每张卡片正面朝上或反面朝上。

判断是否可以通过翻转卡片,使所有可见整数之和恰好等于SS。如果可能,找出一种实现方法。

输入格式

输入从标准输入中给出,格式如下:

NN SS

a1a_1 b1b_1

a2a_2 b2b_2

\vdots

aNa_N bNb_N

输出格式

首先,如果可以使可见整数之和恰好等于SS,则输出"Yes",否则输出"No",后跟换行符。

另外,如果存在这样的放置方法,请输出一个长度为NN的字符串,由"H"和"T"组成,表示实现该和的卡片放置方法。第ii个字符应为"H",如果第ii张卡片应正面朝上放置,为"T"如果应反面朝上。如果有多种可能的放置方法来实现该和,输出其中任何一种即可。

样例

3 11
1 4
2 3
5 7
Yes
THH
5 25
2 8
9 3
4 11
5 1
12 6
No

样例解释

【样例1说明】

例如,以下放置方法可以使可见整数之和恰好等于S(=11)S(= 11)

  • 将第1张卡片正面朝上放置,第2张反面朝上,第3张反面朝上。
  • 将第1张卡片反面朝上放置,第2张正面朝上,第3张正面朝上。

因此,输出"HTT"和"THH"都是可以接受的。

【样例2说明】

无法通过翻转卡片使可见整数之和恰好等于S(=25)S(= 25)

数据范围

  • 1N1001 ≤ N ≤ 100
  • 1S100001 ≤ S ≤ 10000
  • 1ai,bi100(1iN)1 ≤ a_i, b_i ≤ 100 (1 ≤ i ≤ N)
  • 输入中的所有值都是整数。

来源

  • AtCoder ABC271D