# How can I make this backtracking solution efficient

Compute nearest larger number by interchanging digits updated.

Given 2 numbers a and b find the smallest number greater than b by interchanging the digits of a and if not possible print -1.

``````import java.util.Arrays;
``````

import java.util.Scanner;

class Test {
static int ans = Integer.MAX_VALUE;

``````static void f(char[] a, String s, int r, boolean[] vis, int b) {
// System.out.println(s);
if (r == 0) {
int x = Integer.parseInt(s);
if (x > b && x < ans)
ans = Math.min(x, ans);

return;
}

for (int i = 0; i < a.length; i++) {
if (!vis[i]) {
s += a[i];
vis[i] = true;
f(a, s, r - 1, vis, b);
s = s.substring(0, s.length() - 1);
vis[i] = false;
}
}

}

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
char[] a = sc.next().toCharArray();
// System.out.println(Arrays.toString(a));
boolean[] vis = new boolean[a.length];
int b = sc.nextInt();
f(a, "", a.length, vis, b);

System.out.println(ans == Integer.MAX_VALUE ? -1 : ans);

}
``````

}

This is the working solution but how Can I make it fast. I will be glad if you give any suggestions.