PID596 / 保镖排队
题目描述

【问题背景】

  教主LHX作为知名人物,时刻会有恐怖分子威胁他的生命。于是教主雇佣了一些保镖来保障他的人生安全。

【题目描述】

  教主一共雇佣了N个保镖,编号为1~N。每个保镖虽然身手敏捷武功高强,但是他在其余N-1个保镖里,都会有一个“上司”,他会对他的上司言听计从。但一号保镖例外,他武功盖世,不惧怕其余任何保镖,所以他没有上司。

  教主LHX会对这N个保镖进行定期视察。每次视察的时候,首先会让所有保镖排队。

对于每个保镖,在他心目中会对他的所有下属的武功实力排个队。

  现在教主要求排出来的队伍满足:①互为上司-下属的两个保镖,上司在前,下属在后 ②对于一个保镖的所有下属,武功实力较强的在前,较弱的在后。

  教主想知道,总的排队方法数除以10007的余数是多少。

【数据规模】

对于20%的数据,有N ≤ 9;

对于40%的数据,有对于所有K,有K ≤ 2;

对于60%的数据,有N ≤ 100;

对于100%的数据,有T ≤ 10,N ≤ 1000,K ≤ N。

输入格式

输入的第一行为一个正整数T,表示了数据组数。

对于每组数据:

第一行为一个正整数N。

  接下来N行,每行描述一个保镖。

  第i+1行,会有一个整数K,代表第i个保镖的下属个数,接下来K个数,代表第i个保镖的下属按照武功实力从高到低的编号。

输出格式

输出包括C行,每行对于每组数据输出方案数mod 10007后的结果。

【样例说明】

对于第1组数据,有以下3种排列是合法的:

1 2 4 3 5

1 2 3 4 5

1 2 4 5 3

同时满足了1在2与3之前且2在3之前,2在4与5之前且4在5之前

样例输入
样例输出
提交题目 Error [ 更改语言 ] Language
C C++ Pascal Python2
相关讨论
查看更多讨论
发布新讨论 讨论