For this Question: A graph is given with N nodes and M edges. The first visit to a vertex i will give 2<sup>i-1</sup> -1 score. Initially, we are at node 1. Then calculate the maximum score that we can get if we are only allowed to move to an adjacent vertex at most K times.First line contains 3 integers separated by space denoting N (1<=N<=60) , M (1<=M<=N*(N-1)/2) , and K (1<=K<=15), the number of nodes, edges, and the maximum move allowed respectively.

Then, M lines follow with each line containing two integers u and v representing edge between vertex u and v (u≠v).Output maximum score in first line.Input:
4 3 1
1 2
1 3
1 4

Output:
7

Explanation:
Alice can move to node 2 or node 3 or node 4. Here node 4 has (2^3 - 1 = 7)coins., I have written this Solution Code: //*** Author: ShlokG ***//
#include <bits/stdc++.h>
using namespace std;
#define fast ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define fix(f,n) std::fixed<<std::setprecision(n)<<f
typedef long long int ll;
typedef unsigned long long int ull;
#define pb push_back
#define endl "\n"

const ll MAX=1e18+5;

ll mod=1e9+7;
ll mod1=998244353;

const int infi = 1e9;
const ll INF=1e18;

void precompute(){

}

void TEST_CASE(){
    int n,m,k;
    cin >> n >> m >> k;
    int mat[100][100];
    int dp[1<<17][17];
    vector<int> v;
    for(int i=0 ; i<100 ; i++) for(int j=0 ; j<100 ; j++) mat[i][j]=1000;
    for(int i=0 ; i<100 ; i++) mat[i][i]=0;
    for(int i=0 ; i<m ; i++){
        int x,y;
        cin >> x >> y;
        mat[x-1][y-1]=mat[y-1][x-1]=1;
    }
    for(int i=0 ; i<n ; i++) for(int j=0 ; j<n ; j++) for(int l=0 ; l<n ; l++) mat[j][l] = min (mat [j] [l], mat [j] [i] + mat [i] [l ]);
    v.push_back (0);
    ll ret = 0 ;
    for(int i=n-1 ; i>0 ; i--) {
        if(v.size()>=k+1) break;
        v.push_back(i);
        memset(dp,0x3f,sizeof(dp));
        dp[1][0]=0;
        for(int mask=1 ; mask<(1<<v.size()) ; mask++){
            for(int x=0 ; x<v.size() ; x++) if(mask&(1<<x)) {
                for(int y=0 ; y<v.size() ; y++) if(x!=y && (mask&(1<<y))) dp[mask][x] = min(dp[mask][x], dp[mask^(1<<x)][y] + mat[v[x]][v[y]]);
            }
        }
        int ok = 0 ;
        for(int j=0 ; j<v.size() ; j++) if(dp[(1<<v.size())-1][j]<=k) ok++;
        if (ok == 0 ) v.pop_back();
        else ret += ( 1LL << i) -1 ;
    }
    cout << ret << endl;
}

signed main(){
    fast;
    //freopen ("INPUT.txt","r",stdin);
    //freopen ("OUTPUT.txt","w",stdout);
    int test=1,TEST=1;
    precompute();
    //cin >> test;
    while(test--){
        //cout << "Case #" << TEST++ << ": ";
        TEST_CASE();
    }
    return 0;
}
, In this Programming Language: C++, Now tell me if this Code is compilable or not?