import java.util.*;

public class Solution {

    ArrayList<ArrayList<Integer>> res_list = new ArrayList<>();
    Stack<Integer> stack = new Stack<>();
    public ArrayList<ArrayList<Integer>> FindPath (TreeNode root, int target) {
        // write code here
        dfs(root,target);

        return res_list;
    }

    public void dfs(TreeNode root, int target){
        if(root == null) return;

        stack.add(root.val);
        if(root.left == null && root.right == null && target - root.val == 0){
            res_list.add(new ArrayList<>(stack));
        }
        dfs(root.left,target - root.val);
        dfs(root.right,target - root.val);
        stack.pop();
    }


}