import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;

public class Palindrome_Calvin {
	
	private static void fold(int l, char[] chars) {
		if (l == 0) {
			return;
		}
		int half = (l - 1)/2;
		for (int i = 0; i < half; ++i) {
			if (chars[i] == '?') {
				chars[i] = chars[i + half + 1];
			}
		}
		fold(half, chars);
	}
	
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        sol:
        while (true) {
            long k = Long.parseLong(in.nextLine());
            if (k == 0) {
            	break;
            }
            --k; //really, first index is not 0?
            String t = in.nextLine();
            char[] chars = t.toCharArray();
            fold(chars.length, chars);
            char[] _result = new char[13];
            int p = 0;
            int c = 0;
            while (p < chars.length) {
            	_result[c] = chars[p];
            	p = p*2 + 1;
            	++c;
            }
            char[] result = new char[c];
            long q = 0;
            for (int i = 0; i < c; ++i) {
            	result[i] = _result[i];
            	if (i != 0 && _result[i] == '?') {
            		++q;
            	}
            }
            long first = k / power(9, q);
            long offset = k % power(9, q);
            String s_result = new String(result);
        	ArrayList<Character> possibles = new ArrayList<Character>();
            if (result[0] == '?') {
            	for (int i = 1; i <= 9; i++) {
            		if(s_result.indexOf((char) ('0'+i)) == -1) {
                		possibles.add((char) ('0'+i));            			
            		}
            	}
            }
            else {
            	possibles.add(result[0]);
            }
            if (first >= possibles.size()) {
            	System.out.println(-1);
            	continue;
            }
            
            result[0] = possibles.get((int)first);
            
            String base9 = Long.toString(offset, 9);
            while (q > base9.length()) {
            	base9 = '0' + base9;
            }
            int j = 0;
            for (int i = 1; i < result.length; ++i) {
            	if (result[i] == '?') {
            		result[i] = base9.charAt(j);
                	if (result[0] <= result[i]) {
                		++result[i];
                	}
                	++j;
            	}
            }            
            System.out.println(new String(generateSolution(result)));
        }
        in.close();
    }
    
    static long power(long a, long b) {
    	long result = 1;
    	for (int i = 0; i < b; ++i) {
    		result *= a;
    	}
    	return result;
    }
	
	static char[] generateSolution(char[] a) {
		char[] b = new char[(int) (power(2, a.length) - 1)];
		int pointer = 0;
		for (int i = 0; i < a.length; ++i) {
			b[pointer] = a[i];
			for (int j = 0; j < pointer; ++j) {
				b[pointer + 1 + j] = b[j]; 
			}
			pointer *= 2;
			++pointer;
		}
		return b;
	}

}
