class Solution {
public:
    int res = 0;
    int cal(int n){
        int sum = 0;
        while(n){
            sum += (n%10);
            n/=10;
        }
        return sum;
    }
    void dfs(int threshold, vector<vector<bool>>& visited, int i, int j, int rows, int cols){
        if (i<0||i>=rows||j<0||j>=cols||visited[i][j]) return;
        if (cal(i)+cal(j)>threshold) return;
        res += 1;
        visited[i][j] = true;
        dfs(threshold, visited, i+1, j, rows, cols);
        dfs(threshold, visited, i-1, j, rows, cols);
        dfs(threshold, visited, i, j+1, rows, cols);
        dfs(threshold, visited, i, j-1, rows, cols);
    }
    int movingCount(int threshold, int rows, int cols) {
        vector<vector<bool>> visited(rows, vector<bool>(cols, false));
        dfs(threshold, visited, 0, 0, rows, cols);
        return res;
    }
};