<p>The set <code>[1, 2, 3, ...,&nbsp;n]</code> contains a total of <code>n!</code> unique permutations.</p>

<p>By listing and labeling all of the permutations in order, we get the following sequence for <code>n = 3</code>:</p>

<ol>
	<li><code>&quot;123&quot;</code></li>
	<li><code>&quot;132&quot;</code></li>
	<li><code>&quot;213&quot;</code></li>
	<li><code>&quot;231&quot;</code></li>
	<li><code>&quot;312&quot;</code></li>
	<li><code>&quot;321&quot;</code></li>
</ol>

<p>Given <code>n</code> and <code>k</code>, return the <code>k<sup>th</sup></code> permutation sequence.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>
<pre><strong>Input:</strong> n = 3, k = 3
<strong>Output:</strong> "213"
</pre><p><strong class="example">Example 2:</strong></p>
<pre><strong>Input:</strong> n = 4, k = 9
<strong>Output:</strong> "2314"
</pre><p><strong class="example">Example 3:</strong></p>
<pre><strong>Input:</strong> n = 3, k = 1
<strong>Output:</strong> "123"
</pre>
<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>1 &lt;= n &lt;= 9</code></li>
	<li><code>1 &lt;= k &lt;= n!</code></li>
</ul>

class Solution:
    def getPermutation(self, n: int, k: int) -> str:
        def func(n, s, freq, ds, ans, mod):
            if len(ans) >= mod:
                return True
            if len(ds) == n:
                s1 = ''
                for x in ds:
                    s1+=x
                ans.append(s1)
                return False
            l = []
            for i in range(n):
                if not freq[i]:
                    freq[i] = True
                    ds.append(s[i])
                    flag =  func(n, s,freq,  ds, ans, mod)
                    if flag:
                        return True
                    ds.pop()
                    freq[i] = False

        # freq = [False] * n
        # ans =[]
        # func(n, '', freq, [], ans)
        # # print(ans)
        # return ans[k-1]

        # Solution 2

        fact_n = 1
        for i in range(2,n+1):
            fact_n*=i
        print(fact_n)

        mod = fact_n // n
        start  = ceil(k/mod)
        s = ''
        for i in range(1, n+1):
            if i == start:
                s = str(start) + s
            else:
                s = s + str(i)
        freq = [False] * n
        ans = []
        # print(s,freq,mod,k%mod, start)
        func(n, s, freq, [], ans, mod)
        # print(ans)
        return ans[(k%mod)-1]
19400