Gは、一般的なすべての兵士が直接優れている(そしておそらく他の兵士が、それは一般的なGかもしれない)、軍の将軍Gを除いて、よく訓練された軍隊を持っています。今、G一般的には、チームの兵士の要件は、彼の即時の上司がチームにすることはできません場合は、プレイヤーの独立性を高めるために、自殺隊で構成部分(少なくとも1)を送信するために兵士を必要とする特定のタスクを受け入れます。
多くの方法がチームを送信するためにどのように私は、G将軍をお願いします。注、G将軍は、チームに兵士としての役割を果たす。
入力フォーマット
入力の最初の行の整数nを含み、Gを含む軍の数は、一般含みます。軍兵士は、G将軍が1番の、1からnまでの番号。
次に、番号N-1は、それぞれ、3、...、特許即時優れ、優れた直接兵士番号iが数N I兵士よりも小さい、2番号。
出力フォーマット
出力チームを送信するためのプログラムの数を表す整数。数が大きくなり得るので、あなただけの10007の残りの部分に加えて、出力にこの番号が必要です。
サンプル入力1
。3
。1. 1
サンプル出力1
。4
例の説明
これらの4つのモードがあります。
- オプション1;
- オプション2;
- オプション3;
- 2、3から選択されます。
サンプル入力2
。7
。1. 1. 3. 3 2 2
サンプル出力2
40
データサイズと一致した
データの20%を、N≤20と、
データの40%を、N≤100、
データ100%、1≤N≤100000。
:のためのリソース
(仮想マシンを含む)ピークメモリ消費量<256M
CPU消費量<2000ミリ秒
「入力してください...」不要なコンテンツ:厳密に出力の要件に従ってください、余計ないようなものを印刷します。
1つのファイルにすべてのソースコードは、デバッグを通じて、コピー元を提出します。
注:packageステートメントを使用しないでください。jdk1.7と上記の機能を使用しないでください。
注:メイン、または他の不正なコード処理:名前はメインクラスでなければなりません。
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static int n;
public static int MOD = 10007;
public static ArrayList<Integer>[] list;
public static long[][] dp;
public void dfs(int root) {
dp[root][0] = 1;
dp[root][1] = 1;
for(int i = 0;i < list[root].size();i++) {
int child = list[root].get(i);
dfs(child);
dp[root][0] = dp[root][0] * (dp[child][0] + dp[child][1]) % MOD;
dp[root][1] = dp[root][1] * dp[child][0] % MOD;
}
}
@SuppressWarnings("unchecked")
public static void main(String[] args) {
Main test = new Main();
Scanner in = new Scanner(System.in);
n = in.nextInt();
list = new ArrayList[n + 1];
for(int i = 1;i <= n;i++)
list[i] = new ArrayList<Integer>();
for(int i = 2;i <= n;i++) {
int father = in.nextInt();
list[father].add(i);
}
dp = new long[n + 1][2];
test.dfs(1);
long result = (dp[1][0] + dp[1][1] - 1) % MOD;
System.out.println(result);
}
}