use string format instead of builtin format function