pattern solving