func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 105;   const int mod = 1e9 + 7;   long long n, m, x;   long long dp[2][320][320][2];   int main() {     ios_base::sync_with_stdio(false);     cin.tie(0);     if (fopen( A.inp ,  r )) {       freopen( test.inp ,  r , stdin);       freopen( test.out ,  w , stdout);     }     cin >> n >> m >> x;     if (n > m) return cout << 0, 0;     dp[0][0][0][0] = 1;     for (int i = 1; i <= m; i++) {       for (int j = 0; j <= min(1ll * i, n); j++) {         for (int k = 0; k <= j; k++) {           if (i == x) {             if (j > 0)               dp[i & 1][j][k][1] =                   (dp[i & 1][j][k][1] + dp[(i + 1) & 1][j - 1][k][0]) % mod;             if (j > 0 && k > 0)               dp[i & 1][j][k][1] =                   (dp[i & 1][j][k][1] + dp[(i + 1) & 1][j - 1][k - 1][0]) % mod;           } else {             if (j > 0)               dp[i & 1][j][k][i > x] =                   (dp[i & 1][j][k][i > x] + dp[(i + 1) & 1][j - 1][k][i > x]) %                   mod;             if (j > 0 && k > 0)               dp[i & 1][j][k][i > x] = (dp[i & 1][j][k][i > x] +                                         dp[(i + 1) & 1][j - 1][k - 1][i > x]) %                                        mod;             dp[i & 1][j][k][i > x] =                 (dp[i & 1][j][k][i > x] + dp[(i + 1) & 1][j][k][i > x]) % mod;             if (k > 0)               dp[i & 1][j][k][i > x] =                   (dp[i & 1][j][k][i > x] + dp[(i + 1) & 1][j][k - 1][i > x]) %                   mod;           }         }       }       for (int j = 0; j <= min(1ll * i, n); j++) {         for (int k = 0; k <= j; k++) {           dp[(i + 1) & 1][j][k][0] = 0;           dp[(i + 1) & 1][j][k][1] = 0;         }       }     }     long long res = dp[m & 1][n][n][1];     for (int i = 1; i <= n; i++) {       res = res * i % mod;     }     cout << res;   }   