class Solution {
    public int findNumberOfLIS(int[] nums) {
        int[][] dp = new int[nums.length][2];
        int LISLength = 0;
        int LISCount = 0;
        for (int i = nums.length - 1; i >= 0; i--) {
            int maxLength = 1;
            int maxCount = 1;
            for (int j = i + 1; j < nums.length; j++) {
                if (nums[j] > nums[i]) {
                    int length = dp[j][0];
                    int count = dp[j][1];
                    if (length + 1 > maxLength) {
                        maxLength = length + 1;
                        maxCount = count;
                    } else if (length + 1 == maxLength) {
                        maxCount += count;
                    }
                }
            }
            if (maxLength > LISLength) {
                LISLength = maxLength;
                LISCount = maxCount;
            } else if (maxLength == LISLength) {
                LISCount += maxCount;
            }
            dp[i] = new int[] { maxLength, maxCount };
        }
        return LISCount;
    }
}