fn main() {
let P = 20;
let Q = 3;
let mut A = [3, 6, 14];
let dp: Vec<Vec<i32>> = Vec::new();
A[0] = 0;
A[Q + 1] = P + 1;
for q in 0.. {
if q <= Q {
break;
}
dp[q][q + 1] = 0;
}
for w in 2.. {
if w <= Q {
break;
}
for i in 0.. {
if i + w <= Q {
break;
}
let j = i + w;
let t = INF;
for k in i+1.. {
if k < j {
break;
}
t = min(t, dp[i][k] + dp[k][j]);
}
dp[i][j] = t + A[j] - A[i] - 2;
}
}
println!("{}", dp[0][Q + 1]);
}