import java.util.ArrayList; class Tree { private long value; private ArrayList children; public Tree(long tree_value, ArrayList tree_children) { value = tree_value; children = new ArrayList(); for (long child : tree_children) { children.add(new Tree(child, new ArrayList())); } } public void step() { if (children.isEmpty()) { ArrayList xs = next(value); for (long val : xs) { children.add(new Tree(val, new ArrayList())); } return; } for (Tree child : children) { child.step(); } } public ArrayList longestPath() { ArrayList retval = new ArrayList(); if (children.isEmpty()) { retval.add(value); return retval; } int max_length = 0; for (Tree child : children) { ArrayList temp = child.longestPath(); if (temp.size() > max_length) { max_length = temp.size(); retval = temp; } } retval.add(0, value); return retval; } /* modify this function to change functionality */ public ArrayList next(long val) { ArrayList new_xs = new ArrayList(); long temp = val * 10; for (int i = 0; i < 10; i++) { long temp2 = temp + i; if (Util.isPrime(temp2)) { new_xs.add(temp2); } } return new_xs; } }