link
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100010;
int a[MAXN], num[MAXN], yifu[MAXN];
int A, B;
bool isprime(int n){
if(n == 1) return 0;
if(n == 2) return 1;
for(int i = 2; i * i <= n; i++){
if(n % i == 0) return false;
}
return true;
}
bool ishappy(int x){
set<int> s;
int tmp = x, sum1 = 0;
while(tmp != 1){
s.insert(tmp);
sum1 = 0;
while(tmp){
sum1 += (tmp % 10) * (tmp % 10);
tmp /= 10;
}
tmp = sum1;
num[x]++;
yifu[tmp] = 1;
if(s.count(tmp)) return false;
}
return true;
}
int main(){
scanf("%d%d", &A, &B);
vector<int> ans;
for(int i = A; i <= B; i++){
if(ishappy(i)){
ans.push_back(i);
}
}
int flag = 0;
for(int i = 0; i < (int)ans.size(); i++){
if(isprime(ans[i])) num[ans[i]] *= 2;
if(!yifu[ans[i]]){
cout << ans[i] << " " << num[ans[i]] << endl;
flag = 1;
}
}
if(!flag) cout << "SAD" << endl;
return 0;
}