# a470. 12406 - Help Dexter
##### link: https://zerojudge.tw/ShowProblem?problemid=a470
###### tags: `recursion`
* 遞迴枚舉所有可能選項
* 進入一次遞迴就計算一次餘數,如果最後為零,則為合法答案,在決定他是否為最大或最小的可能值。
```C++=
#include <bits/stdc++.h>
using namespace std;
int t,p,q;
int divider;
long long int maxs = -9e18;
long long int mins = 9e18;
void backtrack(int layer, int r, long long int ans){
if (layer == p){
if (r==0){
maxs = max(ans,maxs);
mins = min(ans , mins);
}
return ;
}
backtrack(layer+1 , (10*ans+1)%divider, 10*ans + 1);
backtrack(layer+1 , (10*ans+2)%divider, 10*ans + 2);
}
int main()
{
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
cin>>t;
for (int i=1;i<=t;i++){
cin>>p>>q;
divider = pow(2,q);
mins = 9e18;
maxs = -9e18;
backtrack(0,0,0);
if (mins == 9e18 && maxs == -9e18) cout<<"Case "<<i<<": impossible\n";
else if (mins == maxs) cout<<"Case "<<i<<": "<<mins<<"\n";
else cout<<"Case "<<i<<": "<<mins<<" "<<maxs<<"\n";
}
return 0;
}
```