only using C