HearthStone
题号:NC238694
时间限制:C/C++/Rust/Pascal 3秒,其他语言6秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

在游戏《炉石传说》中,双方玩家拥有若干个随从,一个随从的基本属性有攻击力和生命值,一个攻击力为a,生命值为b的随从,我们可以用数对(a,b)表示。
考虑两个随从(a_1,b_1)(a_2,b_2),它们相互攻击之后,生命值均会扣除对方的攻击力,即第一个随从变为(a_1,b_1-a_2),第二个随从变为(a_2,b_2-a_1)。如果一个随从的生命值降至00以下,则它会死亡。在本题中,随从A攻击随从B和随从B攻击随从A是等价的。
现在你的对手控制着n个随从,第i个随从为(a_i,b_i)。你一开始不控制任何随从,且你能控制的随从数目上限为m(也就是说你不能同时控制着超过m个存活的随从)。
你现在反复执行如下操作,直至你的随从数目达到上限:召唤一个(1,1)的随从,使其等概率攻击一个随机的,仍然存活的敌方随从(显然,如果该(1,1)的随从在攻击后仍存活,才会占用你的随从上限)。
现在你希望知道,你对手的第一个随从(a_1,b_1)最终的存活概率。由于一些原因,你希望对所有的输出答案。

输入描述:

第一行n,M
接下来n行,每行两个数字代表a_i,b_i

输出描述:

一行m个数字,第i个数字代表随从上限为i的时候,你对手第一个随从的存活概率,答案模998244353输出。
示例1

输入

复制
3 3
0 2
0 3
1 4

输出

复制
1 249561089 499122177
示例2

输入

复制
5 10
1 5
0 4
0 6
1 7
0 3

输出

复制
974849 4630529 12855809 413869739 779998325 683459045 116757848 620087160 407844574 249503409