1. 

/**
* FWP, Ausgewählte Probleme aus dem ACM Programming Contest, SS11
* Problem: 112 Tree Summing
* Link: http://uva.onlinejudge.org/external/1/112.pdf
*
* @author Hidir Sayli
* @version 1.0, 05/01/2011
*
* Method : Ad-Hoc
* Status : Accepted
* Runtime: 0.489
*/

#include <iostream>
#include <cstdio>
#include <cmath>

using namespace std;

string input;
int sumVal;
bool positive;

int buildTree ( int start, int sum )
{
if ( input [start + 1] == ')' ) return -1;

char number [50];
int index = 0;
start++; // erste Klammer wird gelöscht

while ( input [start] != '(' ) {
number [index] = input [start];
index++;
start++;
}

number [index] = 0;
int num = atoi (number);

int start1, start2; // zwei kindklammern erzeugen
int left, right = 0; // linke und rechte klammern zählen
start1 = start++;
left = 1;

while ( left != right ) {
if ( input [start] == '(' ) left++;
else if ( input [start] == ')' ) right++;
start++;
}

start2 = start++;
right = 0;
left = 1;

while ( left != right ) {
if ( input [start] == '(' ) left++;
else if ( input [start] == ')' ) right++;
start++;
}

int x = buildTree( start1, sum + num);
int y = buildTree( start2, sum + num);

if ( x == -1 && y == -1 && sum + num == sumVal ) positive = true;

return 0;
}

int main ()
{

while ( scanf ("%d", &sumVal) != EOF ) {

positive = false;
char ch;

while ( scanf ("%c", &ch) && ch != '(' ); // leerzeichen löschen

int leftParenthesis = 1;
int rightParenthesis = 0;

// aktuellen input in einem string ohne leerzeichen aufbauen

input = "(";

while ( leftParenthesis != rightParenthesis ) {
cin >> ch;
if ( ch == '(' ) leftParenthesis++;
else if ( ch == ')' ) rightParenthesis++;

if ( ch != ' ' ) input += ch;
}

buildTree (0, 0);

if ( positive ) printf ("yes\n");
else printf ("no\n");

}

return 0;
}