#    Context
c # output in language C

# no constraints on parameters
1 3 # 1 line and 3 columns

# n 1
1 0 0  # 0 >= 0 always true

1 	# Setting manually the parameter' sname
n  	# The name



# --------------------  Statements  ------------------
6 # Number of statements


1 # First statement: 1 domain 

# First domain

2 4  			# 2 lines and 4 columns
#   i   n    1
1   1   27   -1		# i >= 1
1  -1   1    28		# n >= i
0 0 0

1 # Second statement: 1 domain 

# First domain

4 5  			# 4 lines and 5 columns
#   i   k   n    1
1   1   29   0   -1		# i >= 1
1  -1   0   1    0		# n >= i
1   0   1   0   -1		# k >= 1
1   1  -1   0   -1		# k <= i-1
0 0 0


1 # Third statement: 1 domain 

# First domain

2 4  			# 2 lines and 4 columns
#   i   n    1
1   1   0   -1		# i >= 1
1  -1   1    0		# n >= i
0 0 0


1 # Fourth statement: 1 domain 

# First domain

4 5  			# 4 lines and 5 columns
#   i   j   n    1
1   1   0   0   -1		# i >= 1
1  -1   0   1    0		# n >= i
1  -1   1   0   -1		# j >= i+1
1   0  -1   1    0		# j <= n
0 0 0

1 # Fifth statement: 1 domain 

# First domain

6 6  			# 6 lines and 6 columns
#   i   j   k   n    1
1   1   0   0   0   -1		# i >= 1
1  -1   0   0   1    0		# n >= i
1  -1   1   0   0   -1		# j >= i+1
1   0  -1   0   1    0		# j <= n
1   0   0   1   0   -1		# k >= 1
1   1   0  -1   0   -1		# k <= i-1
0 0 0

1 # Sixth statement: 1 domain 

# First domain

4 5  			# 4 lines and 5 columns
#   i   j   n    1
1   1   0   0   -1		# i >= 1
1  -1   0   1    0		# n >= i
1  -1   1   0   -1		# j >= i+1
1   0  -1   1    0		# j <= n
0 0 0


1 # We manually set the iterator names
i j k


# ------------------------ Scattering -------------------

6 # Number of scattering functions


# First function
3 7					# 3 lines and 7 columns
#   p1  p2  p3   i   n   1
0    1   0   0  -2   0  -2	 	# p1 = 2i+2
0    0   1   0   0   0   0 		# p2 = 0
0    0   0   1   0   0   0	 	# p3 = 0

# Second function
3 8					# 3 lines and 8 columns
#   p1  p2  p3   i   j   n   1
0    1   0   0  -2  -2   0  -1 		# p1 = 2i+2j+1
0    0   1   0   0  -1   0   0 		# p2 = j
0    0   0   1   0   0   0   0 		# p3 = 0

# Third function
3 7					# 3 lines and 7 columns
#   p1  p2  p3   i   n   1	
0    1   0   0  -4   0  -1	 	# p1 = 4i+1
0    0   1   0   0   0   0 		# p2 = 0
0    0   0   1   0   0   0 		# p3 = 0

# Fourth function
3 8					# 3 lines and 8 columns
#   p1  p2  p3   i   j   n   1
0    1   0   0  -2  -2   0   0 		# p1 = 2i+2j
0    0   1   0   1   0   0   0 		# p2 = -i
0    0   0   1   0   0   0   0 		# p3 = 0


# Fifth function
3 9					# 3 lines and 9 columns
#   p1  p2  p3   i   j   k   n   1
0    1   0   0  -2  -2   0   0   0	# p1 = 2i+2j
0    0   1   0   1   0   0   0  -1	# p2 = -i+1
0    0   0   1   0   0  -1   0   0	# p3 = k

# Sixth function
3 8					# 3 lines and 8 columns
#   p1  p2  p3   i   j   n   1
0    1   0   0  -2  -2   0   0 		# p1 = 2i+2j
0    0   1   0   1   0   0  -2 		# p2 = -i+2
0    0   0   1   0   0   0   0 		# p3 = 0

1 # Manually set the scattering dimensions
p1 p2 p3











