import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Scanner; // Incorrect solution based on misinterpreting the problem. public class SteppingPath_sjz { private BufferedReader in; public SteppingPath_sjz(BufferedReader input) { in = input; } private int n; private int[] parents; private int[] values; private int longestPath; private int pathCount; private final int MOD = 11092019; public void solve() { read(); countPaths(); System.out.println ((longestPath+1) + " " + pathCount); } private void countPaths() { longestPath = -1; pathCount = 0; int[] pathLen = new int[n]; for (int i = 0; i < n; ++i) { pathLen[i] = 0; int par = parents[i]; if (par >= 0 && values[i] >= values[par]) { pathLen[i] = 1 + pathLen[par]; } if (pathLen[i] > longestPath) { longestPath = pathLen[i]; pathCount = 1; System.err.println("A path of length " + longestPath + " ends at " + i); } else if (pathLen[i] == longestPath) { pathCount = (pathCount + 1) % MOD; } } } private void read() { Scanner input = new Scanner(in); n = input.nextInt(); parents = new int[n]; values = new int[n]; for (int i = 0; i < n; ++i) { values[i] = input.nextInt(); } parents[0] = -1; for (int i = 1; i < n; ++i) { parents[i] = input.nextInt()-1; } input.close(); } public static void main(String[] args) throws IOException { BufferedReader input; if (args.length > 0) { input = new BufferedReader(new FileReader(args[0])); } else { input = new BufferedReader (new InputStreamReader(System.in)); } SteppingPath_sjz problem = new SteppingPath_sjz(input); problem.solve(); } }