func_code_string: #include <bits/stdc++.h>   using namespace std;   int n, m;   long long a[30], b[30], dp[30][30][30];   struct node {     long long dis[30][30];     node operator*(const node &t) const {       node rep;       memset(rep.dis, 0x3f, sizeof rep.dis);       for (int i = 0; i <= n; i++)         for (int j = 0; j <= n; j++)           for (int k = 0; k <= n; k++)             rep.dis[i][j] = min(rep.dis[i][j], dis[i][k] + t.dis[k][j]);       return rep;     }   } key;   node pow(node rep, int n) {     if (n == 1) return rep;     node req = pow(rep, n / 2);     if (n % 2 == 0) return req * req;     return req * req * rep;   }   int main() {     scanf( %d%d , &n, &m);     for (int i = 1; i <= n; i++) scanf( %d , &a[i]);     for (int i = 1; i <= n; i++) scanf( %d , &b[i]);     memset(dp, 0x3f, sizeof dp);     for (int i = 0; i <= n; i++) dp[i][i][0] = 0;     for (int k = 1; k <= n; k++)       for (int i = 0; i <= n; i++)         for (int j = 0; j <= n; j++) {           if (j - 1 >= 0)             dp[i][j][k] = min(dp[i][j][k], dp[i][j - 1][k - 1] + a[k]);           if (j + 1 <= n)             dp[i][j][k] = min(dp[i][j][k], dp[i][j + 1][k - 1] + b[k]);         }     for (int i = 0; i <= n; i++)       for (int j = 0; j <= n; j++) key.dis[i][j] = dp[i][j][n];     key = pow(key, m);     printf( %d n , key.dis[0][0]);     return 0;   }   