#define MAX 10000 int divisors[MAX]; void buildDivisors(){ for(int i = 1; i < MAX ; i ++){ for(int j = i ; j < MAX ; j += i){ divisors[j] ++; } } } char inputStr[10]; int len; int findAnswer(int curPos, int value){ if(curPos == len){ // cout << "Trying " << value << endl; return divisors[value]; } value *= 10; if( inputStr[curPos] != 'X'){ value += (inputStr[curPos] - '0'); return findAnswer( curPos + 1 , value ); } int startDigit = (curPos == 0) ? 1 : 0 ; int maxDivisors = 0; int curDivisor; int curValue; for(int digit = startDigit; digit < 10 ; digit ++){ curValue = value + digit; curDivisor = findAnswer ( curPos + 1 , curValue ); maxDivisors = max( maxDivisors, curDivisor); } return maxDivisors; } int main(){ int total; buildDivisors(); cin >> total; while(total --){ scanf("%s", inputStr); len = strlen(inputStr); cout << findAnswer( 0 , 0) << endl; } return 0; }