diff --git a/algo/opt_int_prog.sage b/algo/opt_int_prog.sage
new file mode 100755
index 0000000000000000000000000000000000000000..fb0cdeef29ca6371d31c92b65aa1b112d5e994b2
--- /dev/null
+++ b/algo/opt_int_prog.sage
@@ -0,0 +1,26 @@
+#!/usr/bin/env sage
+import sys
+sys.argv[0] = sys.argv[0][:-3]
+
+import lib
+import numpy as np
+
+lib.VERSION = int(2)
+
+@lib.prog
+def opt_int_prog(n, inp, args):
+	other = lib.gen_arr_other_car_of_type(n, inp)
+	sgn = [1 if other[i]>i else -1 for i in range(2*n)]
+	p = MixedIntegerLinearProgram(maximization=False, solver=args[0])
+	x = p.new_variable(integer=True, nonnegative=True)
+	car_x = [ x[inp[i]] if sgn[i]==1 else 1-x[inp[i]] for i in range(2*n)]
+	changes = p.new_variable(integer=True, nonnegative=True)
+	for i in range(2*n-1):
+		p.add_constraint(changes[i] >= car_x[i] - car_x[i+1])
+		p.add_constraint(changes[i] >= car_x[i+1] - car_x[i])
+	p.set_objective(sum(changes[i] for i in range(2*n-1)))
+
+	p.solve()
+	xv = p.get_values(x)
+
+	return [ int(xv[inp[i]] if sgn[i]==1 else 1-xv[inp[i]]) for i in range(2*n)]