Reference solution
One correct implementation. Alternative approaches that satisfy the constraints are equally valid — the reviewer judges behaviour, not style.
#include <bits/stdc++.h>
using namespace std;
void backtrack(int i, vector<int>& a, vector<int>& cur, vector<vector<int>>& out) {
if (i == (int)a.size()) { out.push_back(cur); return; }
backtrack(i + 1, a, cur, out);
cur.push_back(a[i]);
backtrack(i + 1, a, cur, out);
cur.pop_back();
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n; cin >> n;
vector<int> a(n); for (int i = 0; i < n; i++) cin >> a[i];
vector<vector<int>> out; vector<int> cur;
backtrack(0, a, cur, out);
cout << out.size() << '\n';
return 0;
}