import java.util.ArrayList;
import java.util.Scanner;

public class NPAL_Yan {

    private static boolean nestedPalindrome(int r, char[] chars) {
        if (r == 0) return true;
        if ((r + 1) % 2 == 0) return false;

        for (int i = 0, j = r; i <= j; i++, j--) {
            if (chars[i]==chars[j])continue;
            if (chars[i] != '?' && chars[j] != '?') return false;
            if (chars[i] == '?') chars[i]=chars[j];
            if (chars[j] == '?') chars[j]=chars[i];
        }

        return nestedPalindrome(r / 2 - 1, chars);
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        //int t = scanner.nextInt();

        while (true) {
            long k = scanner.nextLong();
            if(k==0)break;

            k--;

            scanner.nextLine();
            String s = scanner.nextLine();
            char[] chars = s.toCharArray();

            if (!nestedPalindrome(s.length() - 1, chars)) {
                System.out.println("-1");
                continue;
            }

            if (chars[0] == '0') {
                System.out.println("-1");
                continue;
            }

            String gen = "" + chars[0];
            boolean bad = false;
            int free = 0;
            for (int i = 2; i <= s.length(); i *= 2) {
                gen += chars[i - 1];
                if (chars[0] != '?' && chars[0] == chars[i - 1]) bad = true;
                if (chars[i - 1] == '?') free++;
            }

            if (bad) {
                System.out.println("impossible");
                continue;
            }

            long seg = k / (long) Math.pow(9.0, free);
            long off = k % (long) Math.pow(9.0, free);

            ArrayList<Character> characters = new ArrayList<Character>();
            if (chars[0] != '?') {
                characters.add(chars[0]);
            } else {
                for (int c = '1'; c <= '9'; c++) {
                    if (gen.indexOf(c) == -1) {
                        characters.add((char) c);
                    }
                }
            }

            if (seg + 1 > characters.size()) {
                System.out.println("-1");
                continue;
            }

            String off_9 = Long.toString(off, 9);
            while (free > off_9.length()) off_9 = '0' + off_9;
            chars[0] = characters.get((int)seg);
            for (int i = 2, j = 0; i <= s.length(); i *= 2) {
                if (chars[i - 1] == '?') {
                    chars[i - 1] = off_9.charAt(j);
                    if (chars[0] <= chars[i - 1]) {
                        chars[i - 1]++;
                    }
                    j++;
                }
            }

            for (int i = 1; i <= s.length(); i *= 2) {
                for (int j = i; j <= s.length(); j += 2 * i) {
                    chars[j - 1] = chars[i - 1];
                }
            }

            System.out.println(String.valueOf(chars));
        }
//        System.out.println("Hello World!");
    }
}
