You have a positive integer m and a non-negative integer s. Your task is to find the smallest and the largest of the numbers that have length m and sum of digits s. The required numbers should be non-negative integers written in the decimal base without leading zeroes.
The single line of the input contains a pair of integers m, s (1 ≤ m ≤ 100, 0 ≤ s ≤ 900) — the length and the sum of the digits of the required numbers.
In the output print the pair of the required non-negative integer numbers — first the minimum possible number, then — the maximum possible number. If no numbers satisfying conditions required exist, print the pair of numbers "-1 -1" (without the quotes).
2 15
69 96
3 0
-1 -1
#include <iostream> #include <algorithm> #include <cstdio> using namespace std; bool can(int m, int s) { if(s >= 0 && 9*m >= s) return true; else return false; } int main() { int m,s; cin>>m>>s; if(!can(m,s)) { cout<<"-1"<<" "<<"-1"<<endl; return 0; } if(m == 1) { if(s >= 10) { cout<<"-1"<<" "<<"-1"<<endl; } else cout<<s<<" "<<s<<endl; } else { if(s == 0) cout<<"-1"<<" "<<"-1"<<endl; else { string minn, maxn; int sum = s; for(int i = 1; i <= m; i++) for(int j = 0; j < 10; j++) { if((j > 0 || (j == 0 && i > 1) ) && can(m - i, sum - j)) { minn += char('0' + j); sum -= j; break; } } sum = s; for(int i = 1; i <= m; i++) for(int j = 9; j >= 0; j--) { if(can(m - i, sum - j)) { maxn += char('0' + j); sum -= j; break; } } cout<<minn<<" "<<maxn<<endl; } } return 0; }